バージョンごとのドキュメント一覧

SAVEPOINT

SAVEPOINT <refpurpose>define a new savepoint within the current transaction</refpurpose> — 現在のトランザクション内に新規にセーブポイントを定義する

概要

SAVEPOINT savepoint_name

説明

<title>Description</title>

<command>SAVEPOINT</command> establishes a new savepoint within the current transaction. SAVEPOINTは、現在のトランザクション内に新しいセーブポイントを設定します。

A savepoint is a special mark inside a transaction that allows all commands that are executed after it was established to be rolled back, restoring the transaction state to what it was at the time of the savepoint. セーブポイントとはトランザクション内に付ける特別な印です。セーブポイントを設定しておくと、それ以降に実行されたコマンドを全てロールバックし、トランザクションを設定時の状態に戻すことができます。

パラメータ

<title>Parameters</title>
savepoint_name

The name to give to the new savepoint. If savepoints with the same name already exist, they will be inaccessible until newer identically-named savepoints are released. 新しいセーブポイントに付与する名前。 同じ名前のセーブポイントが既に存在する場合には、より新しい同一の名前のセーブポイントが解放されるまで使用できなくなります。

注釈

<title>Notes</title>

Use <link linkend="sql-rollback-to"><command>ROLLBACK TO</command></link> to rollback to a savepoint. Use <link linkend="sql-release-savepoint"><command>RELEASE SAVEPOINT</command></link> to destroy a savepoint, keeping the effects of commands executed after it was established. セーブポイントまでロールバックするにはROLLBACK TOを使用してください。 セーブポイント後に行われたコマンドの効果を保持したままセーブポイントを破棄するには、RELEASE SAVEPOINTを使用してください。

Savepoints can only be established when inside a transaction block. There can be multiple savepoints defined within a transaction. セーブポイントはトランザクションブロックの内側のみに設定することができます。 1つのトランザクションの中には、複数のセーブポイントを設定することができます。

<title>Examples</title>

To establish a savepoint and later undo the effects of all commands executed after it was established: セーブポイントを設定し、その後に実行した全てのコマンドの効果を取り消します。

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;

The above transaction will insert the values 1 and 3, but not 2. 上記のトランザクションでは、1と3は挿入されますが、2は挿入されません。

To establish and later destroy a savepoint: セーブポイントを設定し、その後に破棄します。

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

The above transaction will insert both 3 and 4. 上記のトランザクションでは、3と4の両方が挿入されます。

To use a single savepoint name: 単一のセーブポイント名を使用します。

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


    &#45;- rollback to the second savepoint

    -- 2番目のセーブポイントまでロールバック
    ROLLBACK TO SAVEPOINT my_savepoint;

    SELECT * FROM table1;               &#45;- shows rows 1 and 2

    SELECT * FROM table1;               -- 行 1 と 2 を表示


    &#45;- release the second savepoint

    -- 2番目のセーブポイントを解放
    RELEASE SAVEPOINT my_savepoint;


    &#45;- rollback to the first savepoint

    -- 1番目のセーブポイントまでロールバック
    ROLLBACK TO SAVEPOINT my_savepoint;

    SELECT * FROM table1;               &#45;- shows only row 1

    SELECT * FROM table1;               -- 行 1 のみを表示
COMMIT;

The above transaction shows row 3 being rolled back first, then row 2. 上記のトランザクションでは、まず行 3 がロールバックされ、次に行 2 がロールバックされます。

互換性

<title>Compatibility</title>

SQL requires a savepoint to be destroyed automatically when another savepoint with the same name is established. In <productname>PostgreSQL</productname>, the old savepoint is kept, though only the more recent one will be used when rolling back or releasing. (Releasing the newer savepoint with <command>RELEASE SAVEPOINT</command> will cause the older one to again become accessible to <command>ROLLBACK TO SAVEPOINT</command> and <command>RELEASE SAVEPOINT</command>.) Otherwise, <command>SAVEPOINT</command> is fully SQL conforming. SQLでは、同じ名前のセーブポイントが設定された時は、自動的に古い方のセーブポイントを破棄することになっています。 PostgreSQLでは、古いセーブポイントも保持されますが、ロールバックや解放時には新しい方のセーブポイントが使用されます。 (RELEASE SAVEPOINTを用いて新しいセーブポイントが解放されると、再びROLLBACK TO SAVEPOINTRELEASE SAVEPOINTから古いセーブポイントが使用できるようになります。) この点以外は、SAVEPOINTは完全にSQLに従っています。

関連項目

<title>See Also</title> BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, ROLLBACK TO SAVEPOINT