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”在任何情况下;-)

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

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...