2013-04-08 88 views
3

我得到这个奇怪的错误(PostgreSQL的)错误:无法打开关系

Caused by: org.postgresql.util.PSQLException: ERROR: could not open 
relation base/17369/1684: No such file or directory 

我如何恢复它? 任何想法?

谢谢

+5

由什么查询产生?这可能很小,但假设它不是。请阅读并按照以下说明紧急*:http://wiki.postgresql.org/wiki/Corruption。然后编辑你的问题,包括基本信息,如Pg版本,导致错误的命令,PostgreSQL日志文件的内容,操作系统,文件系统,最近断电事件,崩溃,磁盘问题等。同时显示'pg_test_fsync'的输出和'postgresql.conf'中'fsync'参数的值。 – 2013-04-08 10:54:24

+0

很可能是磁盘故障或文件意外删除。 – 2013-04-09 15:59:18

+0

做什么克雷格林格说。 – 2013-05-15 01:18:26

回答

7

您丢失了与表1684和数据库17369相关的文件。检查目录库/ 17369中的名称为1684的存在文件 。

你能确定它是表:

1)获取数据库名称:select * from pg_database where oid=17369

2)获取表名(连接到受影响的数据库):select * from pg_class where oid=1684

有可能是没有更多你可以做。只从备份中恢复。

1

可能有多种原因。如果合理,最好的办法是在通过诊断程序运行硬件后从备份中恢复。

如果不希望从备份中恢复,那么您需要停止Postmaster,制作数据库的副本,并尽快获得专业帮助。数据可能可以或不可以恢复,你需要知道这件事正在进行。另外,我会建议超出Craig指出的链接,在这种情况下(可能会删除文件),从复制中恢复,最好在另一个系统上的整个文件系统的块级拷贝。

FWIW我观察到PostgreSQL在严重滥用的硬件上运行,并且在硬件超出限制时出现许多索引损坏问题(例如,数据库服务器位于热门,不通风的衣柜中的门层以上),但这看起来不像一个(索引损坏相对容易修复,但通常错误信息有点不同)。

现在,另外,它可以有可能与当前数据库备份中恢复数据。很明显,我们不会知道这一点,直到尝试它。