[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ROLLBACK TO SAVEPOINT

名前

ROLLBACK TO SAVEPOINT -- セーブポイントまでロールバック

概要

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

説明

セーブポイントが確立してから実行されたコマンドを全てロールバックします。 セーブポイントは有効なまま残り、必要に応じて、その後再度ロールバックすることができます。

ROLLBACK TO SAVEPOINTは、指定したセーブポイントより後に確立した全てのセーブポイントを暗黙的に破棄します。

パラメータ

savepoint_name

ロールバック先のセーブポイントです。

注釈

セーブポイントの確立後に実行されたコマンドの効果を無視することなくセーブポイントを破棄するには、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;

互換性

SQL:2003標準では、SAVEPOINTキーワードは必須であると規定しています。 PostgreSQLOracleでは省略することができます。 SQL:2003では、WORKのみ使用できます。 TRANSACTIONは使用できず、ROLLBACKの後のノイズです。 また、SQL:2003では省略可能なAND [ NO ] CHAIN句がありますが、これはまだPostgreSQLではサポートされていません。 このコマンドのこの他は標準SQL互換です。

関連項目

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT