当 postgres 运行时,我的 HD 空间不足。我不得不杀死 postgres 并释放一些空间。现在我无法使用以下错误消息重新启动 postgres:
LOG: listening on IPv4 address "0.0.0.0", port 5434
LOG: listening on IPv6 address "::", port 5434
LOG: listening on Unix socket "/tmp/.s.PGSQL.5434"
LOG: database system was interrupted; last known up at 2018-04-16 05:20:46 EDT
PANIC: could not read file "pg_logical/replorigin_checkpoint": Success
LOG: startup process (PID 97490) was terminated by signal 6: Aborted
LOG: aborting startup due to startup process failure
LOG: database system is shut down
里面有data/pg_logical
一个同名的文件,replorigin_checkpoint
但它是空的。
我已经按照此处的建议出于备份原因复制了数据目录,但我实际上并不确定下一步该做什么。amcheck
看起来,它只适用于正在运行的 postgres。
./postgres -V
postgres (PostgreSQL) 11devel
Ubuntu 16.04.4 LTS
也许值得注意的是,文件系统本身就安装在该机器上(nfs
)
问题
1. 里面应该有replorigin_checkpoint
什么?
2. 是否有可能从较早的检查点重新启动?
3. 有哪些类型的损坏修复(不仅是损坏检测)
也许只是尝试重命名文件?如果它仍然是空的,则不应该有任何数据丢失。
如果pg_logical是这里的罪魁祸首,您可以尝试在不激活服务器的情况下启动它吗?您应该更改 postgresql.conf 文件中的一些参数,例如
wal_level
和shared_preload_libraries
。如果它有效,您可以尝试在之后启用 pg_logical。要了解 replorigin_checkpoint 文件中的内容,您可以查看它的github。该文件的文件权限是否正常,您能看到 postgres 用户的内容吗?我也不确定
pg_logical
是否可以使用即将推出的 11devel 版本。您还可以通过不使用 NFS 来为自己省去很多麻烦。许多 PostgreSQL DBA 报告难以理解和修复故障。你应该很容易找到关于这个主题的文献。
如果您不使用逻辑复制,那么您可以删除文件并重新启动。如果您确实使用了逻辑复制,您可以尝试一下,但我不知道它的效果如何——我至少会担心订阅已经不同步并丢失了恢复同步所需的信息,所以会需要重建。
这当然不应该发生。即使在磁盘空间不足之后也不会。我不知道这是否是逻辑复制中的错误,或者是因为您使用的是 NFS,不建议 PostgreSQL 使用 NFS,并且以破坏数据而闻名。检查点文件被写入同一目录中的临时文件,然后重命名到位。这种方法在大多数文件系统上应该不能导致零长度文件(如果写入失败,则不会尝试重命名),但我不知道 over NFS。