postgresql - 如何取消 PostgreSQL 查询?
问题描述
我对数据库或 SQL 不是很熟悉,我想确保我不会搞砸任何事情。我做了:
SELECT pid, state, usename, query FROM pg_stat_activity;
检查我是否有任何疑问,并且有几个处于活动状态。我是否只是通过执行以下操作取消它们:
select pg_cancel_backend(PID);
除了我的查询之外,这不会影响任何事情,对吗?我还想弄清楚为什么这些查询仍处于活动状态。我有一个 python 文件,我在其中读取了我的 sql 文件,但是我在读取我的 sql 文件的过程中停止运行 python 文件。这可能是它发生的原因以及各州仍然活跃的原因吗?
解决方案
是的,这就是pg_cancel_backend(pid)
目的。为什么查询仍在运行取决于几件事-可能正在等待获取锁,或者查询可能需要很长时间-但是鉴于启动查询的python进程已经退出,从技术上讲,连接已经关闭, PG后端进程还没有注意到。在查询完成之前它不会注意到并尝试将查询状态返回给客户端,此时它会在看到连接不再存在时回滚事务。
pg_cancel_backend 对这些后端的 PID 的唯一影响应该是让 PG 注意到连接立即关闭,而不是在查询完成时。
推荐阅读
- amazon-web-services - AWS lambda 容器 /bin/sh 错误:运行时已退出而未提供原因”
- javascript - 如何阻止按钮不是针对浏览器中的特定会话,而是针对特定登录用户 10 秒?
- scheduled-tasks - 电子邮件不使用 Laravel 8 中计划的任务发送
- r - 如何使 LaTeX 包在 rmarkdown 中可用?
- powershell - 用于检查文件是否包含重复项的 Powershell 脚本
- python - 如何在没有循环的范围内查找数字的倍数?
- node.js - 创建反应应用程序 npx 创建反应应用程序失败
- java - Java 11 怎么可能验证中间证书在 cacerts 中不可用的证书?
- python - pyQGIS中的下划线
- javascript - 如何打开一个新窗口并编写html