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

# SAVEPOINT

## 名前

SAVEPOINT -- 現在のトランザクション内に新規にセーブポイントを定義する

## 概要

    SAVEPOINT savepoint_name

## 説明

`SAVEPOINT`は、現在のトランザクション内に新しいセーブポイントを設定します。

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

## パラメータ

`savepoint_name`

  新しいセーブポイントに付与する名前です。

## 注釈

セーブポイントまでロールバックするにはROLLBACK TO SAVEPOINTを使用してください。 セーブポイント後に行われたコマンドの効果を保持したままセーブポイントを破棄するには、RELEASE SAVEPOINTを使用してください。

セーブポイントはトランザクションブロックの内側のみに設定することができます。 1つのトランザクションの中には、複数のセーブポイントを設定することができます。

## 例

セーブポイントを設定し、その後に実行した全てのコマンドの効果を取り消します。

    BEGIN;
        INSERT INTO table1 VALUES (1);
        SAVEPOINT my_savepoint;
        INSERT INTO table1 VALUES (2);
        ROLLBACK TO SAVEPOINT my_savepoint;
        INSERT INTO table1 VALUES (3);
    COMMIT;

上記のトランザクションでは、1と3は挿入されますが、2は挿入されません。

セーブポイントを設定し、その後に破棄します。

    BEGIN;
        INSERT INTO table1 VALUES (3);
        SAVEPOINT my_savepoint;
        INSERT INTO table1 VALUES (4);
        RELEASE SAVEPOINT my_savepoint;
    COMMIT;

上記のトランザクションでは、3と4の両方が挿入されます。

## 互換性

SQLでは、同じ名前のセーブポイントが設定された時は、自動的に古い方のセーブポイントを破棄することになっています。 PostgreSQLでは、古いセーブポイントも保持されますが、 ロールバックや解放時には新しい方のセーブポイントが使用されます （`RELEASE SAVEPOINT`を用いて新しいセーブポイントが解放されると、再び`ROLLBACK TO SAVEPOINT`や`RELEASE SAVEPOINT`から古いセーブポイントが使用できるようになります）。 この点以外は、`SAVEPOINT`は完全にSQLに従っています。

## 関連項目

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, ROLLBACK TO SAVEPOINT

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