我正在尝试终止 postgresql 8.3 中的一个 session (一个特定 session 或所有 session ,无关紧要),但在执行此操作时遇到了问题。我知道在较新的版本(8.4 及更高版本)中有一个 pg_terminate_backend 命令可以解决问题,但这在 postgresql 8.3 中不可用。如果我使用 pg_stat_activity,我可以看到所有事件的 session ,但无法终止它们。
解决方案不一定是 sql 命令,但我希望它独立于正在使用的操作系统(即没有 DOS/UNIX 命令)。
在 Windows 服务中停止和启动 postgres 服务效果很好,但这是操作系统特定的方法。但是,使用“pg_ctl restart -D DATA_DIR”不会停止服务。实际上在我尝试这样做时使用 pg_ctl 尝试重新启动服务会导致一些奇怪的行为。如果有一种方法可以像我假设的 Windows 那样以某种方式使用 pg_ctl 强制关闭进程,那么我可能可以使用它。
无论如何,我正在寻找一种方法来终止 postgresql 8.3 中的一个或所有 session ,该 session 不是特定于平台的。任何帮助都会很棒!
最佳答案
你可以使用 pg_cancel_backend():
select pg_cancel_backend(55555);
您可以将它与 pg_stat_activity 一起使用。例如:
select pg_cancel_backend(procpid)
from pg_stat_activity where current_query='<IDLE>';
如果不行你可以试试这个:
pg_ctl kill -TERM pid
那应该是独立于操作系统的。我不确定行为是否有任何真正的区别。
除此之外,您可以尝试停止和启动服务器,但您指出了奇怪的行为。 (什么样的?)
最后,对于特定于操作系统的选项,在 Linux 上您当然可以尝试使用 kill 命令。 kill -15
( SIGTERM
) 是安全的;这基本上就是pg_terminate_backend
用途:kill -15 <pid>
. kill -9
is moderately unsafe and you should use it only as a last resort .
关于postgresql - 如何终止 postgresql 8.3 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15558963/