最近我的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
答案 0 :(得分:2)
简短回答:从备份恢复。然后调查您的设置,您正在运行一个不安全的系统。
答案很长:
假设您没有备份但需要数据库,那么您已经学到了宝贵的一课。拍摄并检查备份。
如果它是一个简单的SELECT * FROM bad_table
失败那么它就是有问题的表。如果没有,COPY
数据立即显示,你很幸运,它只是一个被破坏的索引。
然后转储所有其余表。
然后进行一些检查以确保数据处于理智状态,然后再恢复并将其重新投入生产。
现在 - 除了PostgreSQL中的错误(不太可能),这应该是不可能的。由于我们正在谈论丢失的文件,我猜你的磁盘报告数据是flushed and synced,而实际上并非如此。无论如何,请检查postgresql.conf中的fsync设置。
答案 1 :(得分:1)
在我的本地服务器中,我的一个测试数据库存在问题,只需删除该数据库即可。现在可以了对于生产服务器来说,删除数据库不是一个好主意。