最近,我的 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
简短的回答:从备份恢复。然后调查您的设置,您正在运行一个不安全的系统。
长答案:
假设您没有备份但需要数据库,您已经学到了宝贵的教训。获取并检查您的备份。
如果是一个简单的SELECT * FROM bad_table
失败了,那么就是表有问题。如果不,COPY
数据立即输出,你很幸运,这只是一个被破坏的索引。
然后转储所有其余的表。
然后进行一些检查,确保数据处于正常状态,然后再恢复数据并将其重新投入生产。
现在——除非 PostgreSQL 中存在错误(不太可能),这应该是不可能的。由于我们正在讨论丢失的文件,我猜您的磁盘报告的数据是刷新并同步 https://www.postgresql.org/docs/current/static/wal-reliability.html当它真的不是的时候。检查你的fsync https://www.postgresql.org/docs/current/static/runtime-config-wal.html#GUC-FSYNC无论如何,postgresql.conf 中的设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)