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 也有“语句级回滚”模式。这些实现的问题在于它们通过发送 SAVEPOINT autosaveRELEASE SAVEPOINT autosave 与服务器添加了额外的通信,因此它会严重限制应用程序的吞吐量。

有关该功能的完整描述以及如何使用该扩展,请参见文档。

链接 & 致谢

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

链接