我正在尝试升级Sentry,数据库中的表已损坏。 阅读了有关真空和重新索引的信息后,我就可以将问题跟踪到一个表中。
从任何其他表中进行select *
都很好,但是这个特定表似乎有问题。有什么方法可以修复表,或者在最坏的情况下,以某种方式转储所有其他表?
pg_dump -T corrupt_table > bkp.sql
不起作用:
bash-4.4# pg_dump -U XXXXXX -T sentry_identityprovider sentry > bkp.sql
pg_dump: [archiver (db)] query failed: ERROR: cache lookup failed for attribute 1 of relation 45941
pg_dump: [archiver (db)] query was: SELECT tableoid, oid, conname, confrelid, pg_catalog.pg_get_constraintdef(oid) AS condef FROM pg_catalog.pg_constraint WHERE conrelid = '45954'::pg_catalog.oid AND contype = 'f'
请避免使用诸如“好吧,请备份”之类的评论。我问是因为我没有备份。
此外,请避免使用诸如“好吧,如果您没有备份,便会发生狗屎”之类的评论。我问是因为执行备份时发生错误,没有备份。
此外,请避免其他与备份有关的无用评论。真。你不是那样帮我的。
答案 0 :(得分:0)
在某个阶段,我已经能够按照以下说明转储和还原单个表。请注意,在pg_dump的帮助中,您应该能够进行完整的转储并排除损坏的表,请不要尝试过。不知道为什么会失败,转储一个好的表可能会给出答案。希望它对您有用。
pg_dump -t good_table old_DB -U youruser -f good_table_BUP.sql
psql -f good_table_BUP.sql new_DB
-t, --table=TABLE dump the named table(s) only
-T, --exclude-table=TABLE do NOT dump the named table(s)