PostgreSQL无法打开文件“base / xxxx / xxxxx”没有这样的文件或目录

时间:2016-08-29 16:40:57

标签: linux postgresql

最近我的linux机器出现了硬件故障,在修复了硬件问题并将我的linux机器恢复后,当我对我的某个表执行查询时,会返回以下错误。

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

2 个答案:

答案 0 :(得分:2)

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

答案很长:

假设您没有备份但需要数据库,那么您已经学到了宝贵的一课。拍摄并检查备份。

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

然后转储所有其余表。

然后进行一些检查以确保数据处于理智状态,然后再恢复并将其重新投入生产。

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

答案 1 :(得分:1)

在我的本地服务器中,我的一个测试数据库存在问题,只需删除该数据库即可。现在可以了对于生产服务器来说,删除数据库不是一个好主意。