セーブポイントの設定後に実行されたコマンドを全てロールバックします。 セーブポイントは有効なまま残るので、必要に応じて、その後再度ロールバックすることができます。
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;