运行postgresql 8.4.11的我的Ubuntu 14.04 LTS服务器崩溃了,在重新启动之后,运行针对postgresql的查询的应用程序服务器报告了以下错误
ERROR: invalid page header in block 40 of relation base/18038/22194
我GOOGLE了,试图创build一个转储,并使用由此产生的错误消息来确定一个破表。 然后我执行了
SET zero_damaged_pages = on; VACUUM FULL damaged_table; -- vacuum didn't report any errors here REINDEX TABLE damaged_table;
别人提到reindexdb ,所以我跑了
$ reindexdb -s mydb
而且,问题仍然保持不变。
最后 – 我从数据库中得到了一个工作备份 – 我删除并重新创build了整个数据库
DROP DATABASE mydb; CREATE DATABASE mydb;
并恢复备份:
cat mydump| sudo -u postgres pgsql mydb
但是即使现在这个问题还是一样的。 我对postgresql知之甚less,但是如何在数据库的重新创build中存在这样的错误呢? 不幸的是我需要再次在同一台机器上运行数据库。
还有什么我可以尝试让数据库再次工作?
这听起来像你的文件系统或磁盘上的某种腐败。
我build议看看这里: postgresql腐败
接下来,我会在dmesg或/var/log/messages查找您可能会看到的任何硬件错误。
如果你有一个工作转储,我会复制当前的数据目录远离/var/lib/postgresql/8.4/main ,运行pg_createcluster 8.4 main在一个新的目录,并尝试恢复那里,看看是否有助于修复任何挥之不去的问题。
如果之后仍然有问题, #postgresql在Freenode IRC上使用#postgresql或者[email protected]是我的下一个步骤,如果我必须尽快启动并运行它的话。
希望有所帮助。 祝你好运。 =)