Jef*_*tho 16 postgresql corrupt-data
我的postgresql数据库有多个错误,这是在电源浪涌后产生的:
我无法从我的数据库访问大多数表.当我尝试例如select * from ac_cash_collection,我得到了愚蠢的错误:
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
我继续尝试运行整个数据库的重新索引,实际上我离开了它,然后进入睡眠状态,我发现早上没有做任何事情,所以我不得不取消它.
我需要一些帮助来尽快解决这个问题,请帮忙.
在你做任何其他事情之前,请http://wiki.postgresql.org/wiki/Corruption 并按照说明行事.如果不这样做可能会使问题变得更糟.
精细手册中列出了两个可能有用的配置参数:ignore_system_indexes和zero_damaged_pages.我从来没有用过它们,但如果我绝望的话我会的...
我不知道他们是否有助于反对吐司桌.在任何情况下,如果设置它们会导致您的数据库再次可用,我会{backup + drop + restore}以使所有表格和目录再次成为新生儿形状.成功!
如果您有备份,只需从中恢复即可.
如果没有 - 您刚刚了解了为什么需要定期备份.如果硬件行为不端,PostgreSQL无法做到.
此外,如果您再次发现自己遇到这种情况,请首先停止PostgreSQL并对所有内容进行完整的文件级备份 - 所有表空间,WAL等.这样您就有了一个已知的起点.
所以 - 如果你还想恢复一些数据.
这是很多工作,然后你需要经历并审核你已经恢复的东西,并试图弄清楚什么是缺失/不正确的.
您可以做更多的事情(在某些情况下创建空块可以让您转储部分数据)但它们更加复杂和繁琐,除非数据特别有价值,不值得付出努力.
要带走的关键信息 - 确保定期备份,并确保它们正常工作.