如何使用python / psycopg2中止/回滚未决的postgres事务?

问题描述

我正在将python(psycopg2)与pycharm一起用于查询postgres数据库中的数据。我想中止并回滚耗时太长的事务。由于我缺少查询编写技能,因此花费了太长时间。

我可以停止执行python脚本,但是postgres事务仍在进行中。

如何使用python / psycopg2中止/回滚未决的postgres事务?

解决方法

上面有两个问题。对于取消python脚本并要中止查询的情况,

https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL

pg_cancel_backend(pid int)布尔值取消后端的当前查询。如果调用角色是其后端被取消的角色的成员,或者已授予调用角色pg_signal_backend,但是只有超级用户可以取消超级用户后端,则也可以这样做。

pg_terminate_backend(pid int)布尔值终止后端。如果调用角色是其后端被终止的角色的成员,或者已授予调用角色pg_signal_backend,但是只有超级用户可以终止超级用户后端,则也可以这样做。

阅读全文以获取所有详细信息。无论如何,您都可以使用这些功能终止查询。

要在一段时间后中止交易,我将查看:

https://www.postgresql.org/docs/current/runtime-config-client.html

statement_timeout(整数)

中止所有花费时间超过指定时间的语句。如果log_min_error_statement设置为ERROR或更低,则还将记录超时的语句。如果指定的该值不带单位,则以毫秒为单位。值为零(默认值)将禁用超时。

从命令到达服务器的时间到服务器完成命令为止的超时时间。在扩展查询协议中,超时在任何与查询相关的消息(“解析”,“绑定”,“执行”,“描述”)到达时开始运行,并在完成“执行”或“同步”消息后被取消。

不建议在postgresql.conf中设置statement_timeout,因为这会影响所有会话。

在运行有问题的查询之前,您可以使用SET设置一个值。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...