2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 的语句级服务器端回滚

发布于 2020-11-02,作者 Gilles Darold
相关开源项目

瑞士苏黎世 - 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 也有“语句级回滚”模式。这些实现的缺点是它们会通过发送 SAVEPOINT autosaveRELEASE SAVEPOINT autosave 来增加与服务器的通信,这可能会严重限制应用程序的吞吐量。

请参阅文档以获取该功能和扩展使用方法的完整描述。

链接与致谢

pg_statement_rollback 是 LzLabs (https://www.lzlabs.com/) 的一个开放项目。欢迎为构建更好的工具做出贡献。您只需通过 GitHub 工具发送您的想法、功能请求或补丁。

链接