脚本中恢复事务故障

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

管理片段

脚本中恢复事务故障

适用于 PostgreSQL

任何版本

SQL

取决于

没有


您可能需要有一部分脚本可能失败或不失败,但您希望脚本恢复并继续进行事务。此时发生故障是可以接受的。

这种情况可能是像创建表的 DDL 语句,该表可能存在也可能不存在。

SAVEPOINT

来救援,但您需要使其

ROLLBACK TO SAVEPOINT

当发生故障时,以及

RELEASE

没有发生故障时。


一个实际示例

BEGIN;

SELECT 1;

SAVEPOINT sp;

CREATE TABLE t1 (
       id bigint,
       s text);

RELEASE sp;
SAVEPOINT sp;
ROLLBACK TO SAVEPOINT sp;
RELEASE sp;

SELECT * FROM t1;
COMMIT;

根据需要运行以上代码,它可以正常工作

诀窍是,在发生故障的情况下

  RELEASE sp;
  SAVEPOINT sp;

来自以上片段的代码将被后端简单地忽略,因为事务处于错误状态。而当没有发生故障时,保存点将被释放,并且将执行以下操作

SAVEPOINT sp;
ROLLBACK TO SAVEPOINT sp;
RELEASE sp;

正如您很容易看到的那样,这没有做任何事情,因为子事务已打开并关闭,并且sp在之后立即被释放。

有关子事务的更多信息,请参见此处:PostgreSQL 文档

--Mcm 2010 年 6 月 20 日 00:00 (UTC)