2016-08-29 588 views
0

最近我在我的linux机器上发生了硬件故障,并修复硬件问题并将我的linux机器恢复后,当我执行查询我的表,下面的错误返回。PostgreSQL无法打开文件“base/xxxx/xxxxx”没有这样的文件或目录

ERROR: could not open file "base/17085/281016": No such file or directory. 

在postgresql/base/17085目录中选中时,文件281016不存在。

如果我使用下面的命令手动创建文件,问题就解决了吗?还是在未来造成更多麻烦的坏方法?

#touch 281016 
#chown postgres:postgres 281016 
#chmod 600 281016 

回答

0

简答:从备份恢复。然后调查你的设置,你正在运行一个不安全的系统。

龙答:

假设你没有备份,而是需要你学到了宝贵的一课数据库。请检查您的备份。

如果这是一个简单的SELECT * FROM bad_table这是失败的,那么它是有问题的表。如果没有,立即发布数据,你很幸运,它只是一个被破坏的索引。

然后转储所有剩下的表格。

然后执行一些检查以确保数据在恢复并重新投入生产之前处于正常状态。

现在 - 在PostgreSQL中禁止错误(不太可能),这应该是不可能的。由于我们正在讨论丢失的文件,我猜想你的磁盘报告的数据是flushed and synced,实际上并非如此。无论如何请检查你的postgresql.conf中的fsync设置。

+0

感谢您的回答理查德:) 这是我的测试系统,这里没有太多的数据,并同意你从备份恢复将是最好的选择。 只是想知道如果我们可以手动创建丢失的文件,如果出现这样的问题,可以影响这样的程序? –

+0

您可以创建一个空文件,但是您的数据库已损坏。有时,用零填充损坏的磁盘块或者同样扩展文件会很有用。然后,您可以倾倒在受损部位周围尽可能地恢复。如果不值得花费很多努力,那么最好从上次备份中恢复并注销任何更新。 –

相关问题