簡體   English   中英

如何使用 python/psycopg2 中止/回滾待處理的 postgres 事務?

[英]How to abort / rollback a pending postgres transaction using python / psycopg2?

我正在使用 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) boolean 取消后端的當前查詢。 如果調用角色是其后端被取消的角色的成員或調用角色已被授予 pg_signal_backend,這也是允許的,但是只有超級用戶可以取消超級用戶后端。

pg_terminate_backend(pid int) boolean 終止后端。 如果調用角色是其后端正在終止的角色的成員,或者調用角色已被授予 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設置一個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM