首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何终止postgresql 8.3会话?

如何终止postgresql 8.3会话?
EN

Stack Overflow用户
提问于 2013-03-22 05:55:53
回答 2查看 7.8K关注 0票数 2

我正在尝试终止PostgreSQL8.3中的一个会话(一个特定会话或所有会话,都无关紧要),但我在做这件事时遇到了问题。我知道在较新的版本(8.4和更高版本)中有一个pg_terminate_backend命令可以做到这一点,但这在PostgreSQL8.3中是不可用的。如果我使用pg_stat_activity,我可以看到所有活动的会话,但无法终止它们。

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

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

无论如何,我正在寻找一种方法来终止PostgreSQL8.3中与平台无关的一个或所有会话。任何帮助都是最好的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-22 05:59:12

您可以使用pg_cancel_backend():

代码语言:javascript
代码运行次数:0
运行
复制
select pg_cancel_backend(55555);

您可以将其与pg_stat_activity一起使用。例如:

代码语言:javascript
代码运行次数:0
运行
复制
select pg_cancel_backend(procpid)
from pg_stat_activity where current_query='<IDLE>';

如果这不起作用,你可以试试这个:

代码语言:javascript
代码运行次数:0
运行
复制
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

票数 7
EN

Stack Overflow用户

发布于 2015-04-21 20:12:46

代码语言:javascript
代码运行次数:0
运行
复制
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";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15558963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档