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

ROLLBACK TO SAVEPOINT

ROLLBACK TO SAVEPOINT <refpurpose>roll back to a savepoint</refpurpose> — セーブポイントまでロールバックする

概要

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

説明

<title>Description</title>

Roll back all commands that were executed after the savepoint was established and then start a new subtransaction at the same transaction level. The savepoint remains valid and can be rolled back to again later, if needed. セーブポイントの設定後に実行されたコマンドをすべてロールバックして、同じトランザクションレベルで新しいサブトランザクションを開始します。 セーブポイントは有効なまま残るので、必要に応じて、その後再度ロールバックすることができます。

<command>ROLLBACK TO SAVEPOINT</command> implicitly destroys all savepoints that were established after the named savepoint. ROLLBACK TO SAVEPOINTは、指定したセーブポイントより後に設定した全てのセーブポイントを暗黙的に破棄します。

パラメータ

<title>Parameters</title>
savepoint_name

The savepoint to roll back to. ロールバック先のセーブポイントです。

注釈

<title>Notes</title>

Use <link linkend="sql-release-savepoint"><command>RELEASE SAVEPOINT</command></link> to destroy a savepoint without discarding the effects of commands executed after it was established. セーブポイントの設定後に実行されたコマンドの結果を維持したままセーブポイントを破棄するには、RELEASE SAVEPOINTを使用してください。

Specifying a savepoint name that has not been established is an error. 設定されていないセーブポイントの名前を指定するとエラーになります。

Cursors have somewhat non-transactional behavior with respect to savepoints. Any cursor that is opened inside a savepoint will be closed when the savepoint is rolled back. If a previously opened cursor is affected by a <command>FETCH</command> or <command>MOVE</command> command inside a savepoint that is later rolled back, the cursor remains at the position that <command>FETCH</command> left it pointing to (that is, the cursor motion caused by <command>FETCH</command> is not rolled back). Closing a cursor is not undone by rolling back, either. However, other side-effects caused by the cursor's query (such as side-effects of volatile functions called by the query) <emphasis>are</emphasis> rolled back if they occur during a savepoint that is later rolled back. A cursor whose execution causes a transaction to abort is put in a cannot-execute state, so while the transaction can be restored using <command>ROLLBACK TO SAVEPOINT</command>, the cursor can no longer be used. カーソルはセーブポイントという観点から見るとトランザクションの外にあるかのように振舞います。 セーブポイントの内部で開かれたカーソルは全て、そのセーブポイントがロールバックした時に閉ざされます。 セーブポイントの前に開かれたカーソルに対しセーブポイント内でFETCHまたはMOVEコマンドを実行した場合、その後、ロールバックされたとしても、カーソルの位置はFETCHの結果、移動した位置から変わりません (つまりFETCHによる位置の移動はロールバックされません)。 また、カーソルのクローズはロールバックしても取り消すことはできません。 しかしカーソルの問い合わせにより発生するその他の副作用(問い合わせにより呼出される揮発性関数の影響など)は、セーブポイント内で実行され、それがロールバックされた場合に、ロールバックされます。 カーソルの実行によってトランザクションのアボートが引き起こされた場合、そのカーソルは実行不可能状態に遷移します。 この場合、トランザクションはROLLBACK TO SAVEPOINTを使用して戻すことができますが、そのカーソルは使用することができません。

<title>Examples</title>

To undo the effects of the commands executed after <literal>my_savepoint</literal> was established: my_savepointの設定後に実行されたコマンドの効果を取り消します。

ROLLBACK TO SAVEPOINT my_savepoint;

Cursor positions are not affected by savepoint rollback: セーブポイントへのロールバックは、カーソル位置に影響を与えません。

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;

互換性

<title>Compatibility</title>

The <acronym>SQL</acronym> standard specifies that the key word <literal>SAVEPOINT</literal> is mandatory, but <productname>PostgreSQL</productname> and <productname>Oracle</productname> allow it to be omitted. SQL allows only <literal>WORK</literal>, not <literal>TRANSACTION</literal>, as a noise word after <literal>ROLLBACK</literal>. Also, SQL has an optional clause <literal>AND [ NO ] CHAIN</literal> which is not currently supported by <productname>PostgreSQL</productname>. Otherwise, this command conforms to the SQL standard. 標準SQLでは、SAVEPOINTキーワードは必須です。 しかし、PostgreSQLOracleでは省略することができます。 SQLで使用できるのは、WORKのみです。 TRANSACTIONは使用できず、ROLLBACKの後の意味のない言葉として扱われます。 また、SQLではAND [ NO ] CHAIN句(省略可能)がありますが、これはPostgreSQLでは現在サポートされていません。 その他については、このコマンドは標準SQLと互換性を持ちます。

関連項目

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