只是一个简单的问题。
我在 PostgreSQL 9.3 中有一个重要的功能,我如何检查该功能是否在几个小时后仍在运行以及如何在 psql 后台运行一个功能(我的连接有时不稳定)
谢谢
最佳答案
对于长时间运行的函数,不时让它们RAISE LOG
或RAISE NOTICE
很有用,以指示进度。如果他们遍历数百万条记录,您可能会每隔几千条记录发出一条日志消息。
有些人还(ab)使用SEQUENCE
,他们在函数中获取序列的nextval
,然后直接读取序列值以检查进度。这很粗糙但很有效。我更喜欢尽可能记录日志。
要处理断开连接,请通过 ssh 在远程端运行 psql
,而不是通过 PostgreSQL 协议(protocol)直接连接到服务器。正如 Christian 建议的那样,使用 screen
这样远程 psql
就不会在 ssh session 结束时被杀死。
或者,您可以使用随处可用的传统 unix 命令 nohup
:
nohup psql -f the_script.sql </dev/null &
这将在后台运行 psql
,将所有输出和错误写入名为 nohup.out
的文件。
您可能还会发现,如果启用 TCP keepalive,无论如何都不会丢失远程连接。
关于PostgreSQL 如何检查我的函数是否仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761223/