postgresql - 如何终止 postgresql 8.3 session ?

标签 postgresql postgresql-8.3

我正在尝试终止 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/

相关文章:

postgresql - 如何使用 psql 命令列出、创建、使用和检查数据库?

postgresql - 聚合函数以保留特定值,具体取决于其他列

sql - 如何每天选择超过1条记录?

postgresql - Ubuntu 上的 Postgres 配置问题?

sql - 为满足期间之间条件的每一行添加一个

sql - 根据日期求和/聚合数据

sql - 在 PostgreSQL 8.3 中实现总订单排名

sql - 如何在 PostgreSQL 查询中声明变量

java - 坚持后如何填充完整的实体?