加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:50:14 所属栏目:百科 来源:网络整理
导读:我使用Heroku与Crane Postgres选项,我在我的本地机器上运行一个查询数据库,当我的本地机器崩溃。如果我跑 select * from pg_stat_activity 其中一个条目 IDLE in transaction 在current_query_text列中。 因此,我不能删除被终止的查询正在写入的表。我试
我使用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”在任何情况下;-)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读