多个保存点与回滚

PostgreSQL 中的事务与错误处理

Jason Myers

Principal Engineer

多个保存点

BEGIN TRANSACTION;

UPDATE inventory SET quantity = quantity - 1 WHERE name in ('flour', 'sugar');

SAVEPOINT inventory_step;

INSERT baking_list SET quantity=12 WHERE name='Torun';

SAVEPOINT queuing_step;

UPDATE cookies SET quantity = 12 WHERE name = 'Torun';
PostgreSQL 中的事务与错误处理

重复的保存点名称

  • 在同一事务中,新建与先前同名的 SAVEPOINT 会"遮蔽"先前的保存点,而非覆盖或释放它。
  • 一般应避免在一个事务内重复使用保存点名称。
PostgreSQL 中的事务与错误处理

重复名称示例

BEGIN TRANSACTION;

UPDATE inventory SET quantity = quantity - 1 WHERE name in ('flour', 'sugar');

SAVEPOINT oops;

INSERT baking_list SET quantity=12 WHERE name='Torun';

SAVEPOINT oops;

UPDATE cookies SET quantity = 12 WHERE name = 'Torun';
PostgreSQL 中的事务与错误处理

开始练习!

PostgreSQL 中的事务与错误处理

Preparing Video For Download...