【问题标题】:how to terminate postgresql 8.3 sessions?如何终止 postgresql 8.3 会话?
【发布时间】:2015-04-21 20:37:06
【问题描述】:

我正在尝试终止 postgresql 8.3 中的会话(特定会话或所有会话,无关紧要),但在执行此操作时遇到了麻烦。我知道在较新的版本(8.4 及更高版本)中有一个 pg_terminate_backend 命令可以解决问题,但这在 postgresql 8.3 中不可用。如果我使用 pg_stat_activity,我可以看到所有处于活动状态但无法终止它们的会话。

解决方案不一定是 sql 命令,但我希望它独立于正在使用的操作系统(即没有 DOS/UNIX 命令)。

在 Windows 服务中停止和启动 postgres 服务效果很好,但这是一种特定于操作系统的方法。但是,使用 'pg_ctl restart -D DATA_DIR' 不会停止服务。实际上,在我尝试这样做时使用 pg_ctl 尝试重新启动服务会导致一些奇怪的行为。如果有一种方法我可以以某种方式使用 pg_ctl 来强制关闭进程,就像我假设 windows 所做的那样,那么我可能可以使用它。

无论如何,我正在寻找一种方法来终止 postgresql 8.3 中非特定平台的一个或所有会话。任何帮助都会很棒!

【问题讨论】:

  • 您应该真的考虑升级到受支持的版本。 8.3 真的很旧(顺便说一句:没有“DOS”命令来停止 Postgres,因为 Postgres 不在“DOS”上运行)
  • @a_horse_with_no_name 我知道 Windows 不再真正使用“DOS”了。我主要使用该术语来区分 Windows GUI 方法和命令行方法。我想我应该改掉误用这个词的习惯,找到另一个简单的词,比如 CMD 之类的东西来称呼它。

标签: postgresql postgresql-8.3


【解决方案1】:

你可以使用 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 &lt;pid&gt;kill -9 is moderately unsafe and you should use it only as a last resort.

【讨论】:

  • Re kill -9 请阅读 serverfault.com/questions/415188/kill-9-a-postgres-process 了解为什么这真的不是一个好主意。请不要在没有链接详细说明的情况下建议人们kill -9Pg;只要你不做傻事就可以了,但你必须小心。 kill -9总是导致 PostgreSQL 崩溃并重新启动,中止所有正在运行的语句和未提交的事务。
  • 谢谢! pg_ctl kill 为我工作。需要指出的一件事是,kill 类型之前的破折号不应该存在。这是更正后的命令:pg_ctl kill TERM pid
  • @CraigRinger:感谢您的澄清。在我进行杀戮时,所有会话无论如何都应该处于空闲状态,因此重新启动不会有问题。
  • 另外,pg_cancel_backend(pid) 不会终止进程,它只是取消 proc 正在处理的查询。
【解决方案2】:
su - posgres
psql


SELECT pg_terminate_backend(pg_stat_activity.procpid)  FROM  pg_stat_activity  WHERE  procpid <> pg_backend_pid()  AND datname = 'dbname' ;
drop database "database name";

【讨论】:

  • 建议在您的回答中添加一些解释,以便其他用户对答案有一个清晰的了解。
猜你喜欢
  • 2018-11-21
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多