PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

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

## 関連項目

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT

前のページ | ホーム | 次のページ
ROLLBACK | 上に戻る | SAVEPOINT