我正在设计一个过程来测试我的 postgresql 10.8 备份,方法是将它们还原到一次性虚拟机中的随机时间点。我一直无法完全自动化这个过程。我在官方文档的第 8 步(第 25.3.4 节)被阻止
- 启动服务器。
执行pg_ctl start
over ssh 时,命令会挂起,直到它被杀死。如果我直接 ssh 到 VM 上并执行pg_ctl start
,那么命令会按预期快速返回。
2012 年的这个帖子似乎描述了类似的场景。然而,在我的情况下,即使调用会话在挂起时被终止,postgres 进程也会成功启动(虽然可能在 9.0.5 和 10.8 之间有所改进?)。
这个 github 问题似乎是相关的,但遗憾的是通过用我不知道的语言进行长时间的重写来“解决”并最终得出结论,这是pg_ctl
二进制文件中的一个错误。
大问题
如何自动执行第 8 步,以便继续对备份媒体进行后续验证测试?
这是我需要破解的二进制文件中的一个突出错误吗?还是我错过了一个明智的实施?
看起来
pg_ctl
需要一个真正的输出终端,ssh
当您简单地要求它运行命令时,它不会被分配。根据Postgres 手册因此,您要么需要告诉
ssh
分配终端以pg_ctl
使用-t
选项( ) ,ssh -t somehost "pg_ctl start"
要么告诉pg_ctl
不要写入终端(或)ssh somehost "pg_ctl start >/dev/null"
ssh somehost "pg_ctl start -l /tmp/start.log "