PostgreSQL 的伺服器端語句層級回滾

由 Gilles Darold 發表於 2020-11-02
相關開源

瑞士蘇黎世 - 2020 年 11 月 2 日

PostgreSQL 的伺服器端語句層級回滾

pg_statement_rollback 的初始版本 v1.0 今天發布。

pg_statement_rollback 是一個 PostgreSQL 擴充套件,用於新增具有語句層級回滾的伺服器端交易,就像在 Oracle 或 DB2 中一樣。

語句層級回滾

如果在執行期間,任何 SQL 語句導致錯誤,則該語句的所有效果都會回滾。 回滾的效果就像從未運行過該語句一樣。 此操作稱為語句層級回滾,具有以下特徵

  • 不成功的 SQL 語句只會導致其自身執行的工作丟失。 不成功的語句不會導致目前交易中在其之前進行的任何工作丟失。
  • 回滾的效果就像從未運行過該語句一樣。

在 PostgreSQL 中,當您遇到錯誤時,交易無法繼續,並且交易中完成的所有工作都會回滾。 Oracle 或 DB2 在每個語句執行之前都有隱式儲存點,允許回滾到語句失敗之前的狀態。

目前 PostgreSQL 的語句層級回滾實現在客戶端完成。 psql 具有 \set ON_ERROR_ROLLBACK on,JDBC 在執行查詢時出現 SQL 異常時具有 autorollback,psqlODBC 也具有 "statement level rollback" 模式。 這些實現的問題是它們透過發送 SAVEPOINT autosaveRELEASE SAVEPOINT autosave 來增加與伺服器的額外通信,因此可能會嚴重限制應用程式的吞吐量。

有關該功能的完整描述以及如何使用該擴充套件,請參閱文件。

連結 & 鳴謝

pg_statement_rollback 是 LzLabs 的一個開放專案 (https://www.lzlabs.com/)。 歡迎任何為構建更好工具的貢獻。 您只需使用 GitHub 工具發送您的想法、功能請求或修補程式。

連結