セーブポイントが確立してから実行されたコマンドを全てロールバックします。 セーブポイントは有効なまま残り、必要に応じて、その後再度ロールバックすることができます。
ROLLBACK TO SAVEPOINTは、指定したセーブポイントより後に確立した全てのセーブポイントを暗黙的に破棄します。
セーブポイントの確立後に実行されたコマンドの効果を無視することなくセーブポイントを破棄するには、RELEASE SAVEPOINTを使用してください。
確立していないセーブポイントの名前を指定するとエラーになります。
カーソルはセーブポイントという点からはトランザクション外のように振舞います。 セーブポイントの内部で開かれたカーソルは全て、そのセーブポイントがロールバックした時に閉ざされます。 セーブポイントの内部でFETCHコマンドを行ったカーソルの場合は、その後にセーブポイントまでロールバックされたとしても、カーソルの位置はFETCHにより指し示した位置のまま変わりありません。 (つまりFETCHはロールバックされません。) また、ロールバックによりカーソルは閉ざされません。 その実行によりトランザクションのアボートを引き起こしたカーソルは実行不可能状態に遷移します。 そのためトランザクションはROLLBACK TO SAVEPOINTを使用して戻すことはできますが、そのカーソルをその後に使用することはできません。
my_savepointの確立後に実行されたコマンドの結果を取消します。
ROLLBACK TO SAVEPOINT my_savepoint;
セーブポイントのロールバックによるカーソル位置への影響はありません。
BEGIN;
DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;
SAVEPOINT foo;
FETCH 1 FROM foo;
?column?
----------
1
ROLLBACK TO SAVEPOINT foo;
FETCH 1 FROM foo;
?column?
----------
2
COMMIT;