複数のセーブポイントとロールバック

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...