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

Chi*_*ani 5 linux postgresql

最近,我的 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)

Ric*_*ton 5

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

长答案:

假设您没有备份但需要数据库,您已经学到了宝贵的教训。获取并检查您的备份。

如果是一个简单的SELECT * FROM bad_table问题,那么问题就出在表上。如果没有,COPY数据会立即输出,你很幸运,这只是一个被破坏的索引。

然后转储所有其余的表。

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

现在——除非 PostgreSQL 中存在错误(不太可能),这应该是不可能的。由于我们正在讨论丢失的文件,我猜测您的磁盘报告数据已刷新并同步,但实际上并未刷新和同步。无论如何,请检查postgresql.conf 中的fsync设置。