如何取消PostgreSQL查询?

问题描述 投票:0回答:1

我对数据库或SQL不太熟悉,并希望确保我不会弄乱任何东西。我做到了:

SELECT pid, state, usename, query FROM pg_stat_activity;

要检查我是否有任何查询,并且有几个查询处于活动状态。我是否可以通过以下方式取消它们:

select pg_cancel_backend(PID);

而且这不会影响我的查询,对吗?我还想弄清楚为什么这些查询仍然处于活动状态。我在读取sql文件的地方有一个python文件,但是在读取sql文件的过程中我停止运行python文件。这可能是为什么发生了,为什么状态仍然活跃吗?

postgresql
1个回答
0
投票

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

对那些后端的PID唯一的pg_cancel_backend效果应该是使PG注意到立即关闭连接,而不是在查询完成时发出通知。

© www.soinside.com 2019 - 2024. All rights reserved.