PostgreSQL 8.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では、古いセーブポイントは保持されます。 しかし、ロールバックや解放時にはより最近のセーブポイントが使用されます。 （より新しいセーブポイントを解放することで、古い方が再び`ROLLBACK TO SAVEPOINT`と`RELEASE SAVEPOINT`から使用できるようになります。） この他については`SAVEPOINT`は完全にSQLに従います。

## 関連項目

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

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