💽

SAVEPOINTでトランザクションをセーブする

2024/04/27に公開

SAVEPOINTとは

SAVEPOINTは、現在のトランザクション内に新しいセーブポイントを設定します。
セーブポイントとはトランザクション内に付ける特別な印です。セーブポイントを設定しておくと、それ以降に実行されたコマンドを全てロールバックし、トランザクションを設定時の状態に戻すことができます。

https://www.postgresql.jp/docs/9.4/sql-savepoint.html

使い方

-- セーブポイントを定義する
savepoint (セーブポイント名);

-- 特定のSAVEPOINTに戻る
rollback to (セーブポイント名);

使用例

begin;

    insert into table1 values(1);
    savepoint sp1;

    -- わざとエラーを起こす
    error;
    -- syntax error at near "error"
    
    select * from table1;
    -- current transaction is aborted, commands ignored until end of transaction
    
    rollback to sp1;

    select * from table1;

commit;

Discussion