无法打开文件 "pg_clog/0000": 没有那个文件或目录

Could not open file "pg_clog/0000": No such file or directory

我在访问 Postgres 数据库时遇到如下错误

ERROR:  could not access status of transaction 69675
DETAIL:  Could not open file "pg_clog/0000": No such file or directory.

我没有对 pg_clog 文件夹进行任何操作,但是 0000 文件不存在。 有没有办法恢复该文件或以任何方式解决此问题? 任何帮助将不胜感激。

您遇到数据库损坏,您应该从备份中恢复。您应该设法弄清楚数据库发生了什么,以便将来可以防止它发生。

  • 你的存储可靠吗?
  • 您是否在使用 fsync = off 等危险设置?
  • 最近有崩溃吗?
  • 你真的是运行9.1吗?如果是,您不应该这样做,因为它不受支持。
  • pg_clog目录下有文件吗?应该有。
  • 您最近是否遇到过 space 问题导致有人从“日志”目录中删除文件?

如之前的回复所述,您最好从备份中恢复,但是,当我们在服务器上恢复数据时,我发现这些交易文件的元数据没有存储在与数据相同的位置我们正在使用完全真空进行一些测试,需要将数据库恢复到真空之前的早期状态。如果您的数据完整性不像测试数据库那样重要,您可以像这样为丢失的事务日志创建空文件:

dd if=/dev/zero of=/path/to/db/pg_clog/xxxx bs=256k count=1
chown postgres.postgres /path/to/db/pg_clog/xxxx
chmod go-rwX /path/to/db/pg_clog/xxxx

可能有多个文件丢失,但如果只是几个文件,这是一个可供考虑的备选方案。