问题描述
我正在将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设置一个值。