微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – Heroku Postgres – 终止挂起查询(在事务中空闲)

我使用Heroku与Crane Postgres选项,我在我的本地机器上运行一个查询数据库,当我的本地机器崩溃。如果我跑
select * from pg_stat_activity

其中一个条目

<IDLE> in transaction

在current_query_text列中。

因此,我不能删除被终止的查询正在写入的表。我试过使用pg_cancel_backend(N),它返回True,但似乎没有发生。

如何终止此过程,以便我可以删除表?

更新:这个答案可能要求用户有超级用户访问,到postgres服务器或postgres数据库 – 所以它仍然是一个剩下的问题:有任何方式一个普通用户可以杀死自己的查询过程,除非要求他的DBA或sysadmin的帮助?

通过运行此sql查找PID:

select procpid,* from pg_stat_activity where current_query<>'<IDLE>' order by xact_start;

您会在第一个(左侧)列中找到procpid,第一个(上)行很可能是您要终止的查询。我会假设pid是1234以下。

您可以通过sql取消查询(即没有shell访问,但您可能需要超级用户访问数据库):

select pg_cancel_backend(1234);

这是“软”的方式…查询不会立即消失。如果你很匆忙,试试这个:

select pg_terminate_backend(1234);

如果你有shell访问,你也可以从shell:

kill 1234

这对我来说总是有效的,但我已经读过某个地方,正确的方法是:

kill -INT 1234

不要:

kill -9 1234

…这将导致整个postgres服务器在火焰中下降。 Postgres是相当鲁棒的,所以除了没有什么真的不好应该发生,但我建议不要使用“kill -9”在任何情况下;-)

“事务中空闲”意味着事务没有以“提交”或“回滚”终止,这意味着应用程序有错误或未正确设计为与事务数据库一起工作。应避免持久的“空闲事务”,因为它也可能导致主要的性能问题。

原文地址:https://www.jb51.cc/postgresql/193670.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐