首页 > 解决方案 > 如何取消 PostgreSQL 查询?

问题描述

我对数据库或 SQL 不是很熟悉,我想确保我不会搞砸任何事情。我做了:

SELECT pid, state, usename, query FROM pg_stat_activity;

检查我是否有任何疑问,并且有几个处于活动状态。我是否只是通过执行以下操作取消它们:

select pg_cancel_backend(PID);

除了我的查询之外,这不会影响任何事情,对吗?我还想弄清楚为什么这些查询仍处于活动状态。我有一个 python 文件,我在其中读取了我的 sql 文件,但是我在读取我的 sql 文件的过程中停止运行 python 文件。这可能是它发生的原因以及各州仍然活跃的原因吗?

标签: postgresql

解决方案


是的,这就是pg_cancel_backend(pid)目的。为什么查询仍在运行取决于几件事-可能正在等待获取锁,或者查询可能需要很长时间-但是鉴于启动查询的python进程已经退出,从技术上讲,连接已经关闭, PG后端进程还没有注意到。在查询完成之前它不会注意到并尝试将查询状态返回给客户端,此时它会在看到连接不再存在时回滚事务。

pg_cancel_backend 对这些后端的 PID 的唯一影响应该是让 PG 注意到连接立即关闭,而不是在查询完成时。


推荐阅读