修复损坏的表

时间:2018-09-12 23:28:27

标签: postgresql corruption

我正在尝试升级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'

请避免使用诸如“好吧,请备份”之类的评论。我问是因为我没有备份。

此外,请避免使用诸如“好吧,如果您没有备份,便会发生狗屎”之类的评论。我问是因为执行备份时发生错误,没有备份。

此外,请避免其他与备份有关的无用评论。真。你不是那样帮我的。

1 个答案:

答案 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)