最近,我的 Linux 机器上出现了硬件故障,在修复硬件问题并恢复我的 Linux 机器后,当我对其中一个表执行查询时,返回以下错误。
ERROR: could not open file "base/17085/281016": No such file or directory.
Run Code Online (Sandbox Code Playgroud)
在 postgresql/base/17085 目录中检查时,文件 281016 不存在。
如果我使用以下命令手动创建文件,问题是否可以解决?或者这是一种不好的做法,会在未来造成更多麻烦?
#touch 281016
#chown postgres:postgres 281016
#chmod 600 281016
Run Code Online (Sandbox Code Playgroud)
简短的回答:从备份恢复。然后调查您的设置,您正在运行一个不安全的系统。
长答案:
假设您没有备份但需要数据库,您已经学到了宝贵的教训。获取并检查您的备份。
如果是一个简单的SELECT * FROM bad_table问题,那么问题就出在表上。如果没有,COPY数据会立即输出,你很幸运,这只是一个被破坏的索引。
然后转储所有其余的表。
然后进行一些检查,确保数据处于正常状态,然后再恢复数据并将其重新投入生产。
现在——除非 PostgreSQL 中存在错误(不太可能),这应该是不可能的。由于我们正在讨论丢失的文件,我猜测您的磁盘报告数据已刷新并同步,但实际上并未刷新和同步。无论如何,请检查postgresql.conf 中的fsync设置。
| 归档时间: |
|
| 查看次数: |
15748 次 |
| 最近记录: |