我使用交互式 psql 对我们的一个数据库运行重新索引。不幸的是,在重新索引仍在运行时 ssh 连接断开了,我愚蠢地没有将 psql 放在屏幕窗口中(我没有意识到它花了多长时间!)
当我能够再次登录机器后,我运行
ps aux | grep REINDEX
并且输出似乎表明重新索引仍在运行:
postgres 6180 99.9 0.0 774960 4804 ? Rs Jun27 3022:02 postgres: postgres my_db_name [local] REINDEX
在这种情况下,postgres 的预期行为是什么?它会继续运行重新索引直至完成吗?
另外,有什么方法可以重新连接到 psql,以便我可以继续看到重新索引的正在进行的输出?
答案1
REINDEX 可能会在尝试向不再存在的 psql 发送反馈时中止,并且最终会以“客户端断开连接”的形式传播。或者,如果 psql 仍然存在,当其 tty 和 sshd 缓冲区溢出时,它最终会死亡……不过,这可能会使其花费更长时间。
重新连接来查看该命令的输出实际上是不可能的。
答案2
根据我的经验,一旦你的 shell 因空闲活动而终止,这些东西就会消失。
这是您应该使用 GNU Screen 之类的工具的情况之一。使用 GNU Screen,您可以登录服务器,键入screen
,然后开始工作。您可以在该屏幕会话中使用以下命令生成其他终端Ctrl+ac,并在它们之间循环Ctrl+an和Ctrl+AP。要断开与 GNU Screen 的连接,您可以输入Ctrl+广告。要重新连接,您可以登录并运行screen -r
。
Kuro5hin 的 Howto 可以在这里找到: http://www.kuro5hin.org/story/2004/3/9/16838/14935