我有我的PostgreSQL数据库,从而导致电涌后多个错误:
我无法从我的数据库访问大多数表。 当我尝试例如select * from ac_cash_collection
,我得到的foolowing错误:
ERROR: missing chunk number 0 for toast value 118486855 in pg_toast_2619
当我尝试的pg_dump我得到以下错误:
Error message from server: ERROR: relation "public.st_stock_item_newlist" does not exist
pg_dump: The command was: LOCK TABLE public.st_stock_item_newlist IN ACCESS SHARE MODE
我继续尝试运行整个数据库的重建索引,其实我在我离开它runnng,睡觉去了,我发现它没有在上午做任何事情,所以我不得不取消它。
我需要一些帮助,以尽快解决这个问题,请帮助。
在你做任何事情, http://wiki.postgresql.org/wiki/Corruption 和行为上的说明 。 如果不这样做有风险,问题变得更糟。
还有的列出两个配置参数精细的手工 ,可能是使用: ignore_system_indexes
和zero_damaged_pages
。 我从来没有使用过,但我想如果我是绝望......
我不知道他们是否有助于消除敬酒桌。 在任何情况下,如果将它们设置使你的数据库(S)成为可以再次使用,我会{备份+滴+恢复}重新获得所有表和目录到新生的形状。 成功!
如果你有备份,只是从他们恢复。
如果没有 - 你刚刚得知你为什么需要定期备份。 没有什么如果硬件行为不端的PostgreSQL可以做。
另外,如果你发现自己在这种情况下再次,先停止PostgreSQL和采取一切的完整的文件级备份 - 所有表,沃尔玛等你有一个已知的起点的方式。
所以 - 如果你仍想恢复一些数据。
- 尝试倾销单独的表。 得到什么,你可以用这种方式。
- 删除索引,如果他们造成的问题
- 转储表的部分(ID = 0..9999,1000..19999等) - 这样你可以查明某些行可能已损坏,倾倒更小的部分,以恢复什么的还是不错的。
- 尝试倾销只是某些列 - 大文本值存储外的线(在敬酒表),因此避免他们可能会得到你的数据的其余部分进行。
- 如果你有损坏的系统表,然后你进入了很多工作。
这是一个很大的工作,然后你就需要通过和审核,你已经恢复什么,并试图找出什么遗漏/不正确。
还有更多的事情可以做(创建在某些情况下空块可以让你倾倒的部分数据),但他们都比较复杂和繁琐的,除非该数据显得尤为可贵就得不偿失了。
主要信息从该带走 - 请确保您定期备份,并确保他们的工作。
在你做任何事情,使损坏的数据库的完整文件系统级别的副本。
http://wiki.postgresql.org/wiki/Corruption
如果不这样做会破坏什么导致了腐败的证据,也就是说,如果你的修为努力去不好,更糟糕的是,你不能撤消他们。
现在将其复制!