transaction_rollback_scope parameter
====================================

データベース内のトランザクションロールバックスコープを設定するには、
``transaction_rollback_scope`` パラメーターを使用します。
``transaction_rollback_scope`` パラメーターには、2つの値があります。

-  ``transaction``
   —標準のPostgres動作。各エラーはトランザクション全体を中止します。

-  ``statement`` —
   1つのステートメントの実行中のエラーは、そのステートメントにのみ影響を及ぼし、トランザクション全体のステータスには影響しません。

パラメーターの設定
------------------

パラメーターをユーザーレベルのプロパティ、接続オプション、または特定のファンクションまたはプロシージャーのモードとして設定できます。

パラメーターをユーザーレベルのプロパティとして設定します
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: sql

   ALTER USER somebody SET transaction_rollback_scope TO statement;

パラメーターを接続オプションとして設定する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: sh-session

   PGOPTIONS="-c transaction_rollback_scope=statement" psql <other options>

特定のファンクションまたはプロシージャのモードを設定する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

PL/pgSQLを使用する場合、特定のファンクションまたはプロシージャのモードを設定できます。

.. code:: sql

   ALTER FUNCTION myfunc SET transaction_rollback_scope TO statement;

サブトランザクションの処理方法
------------------------------

``statement``
値を選択した場合、各SQLコマンドの直前にサブトランザクションが開きます。コマンドが成功した場合、サブトランザクションは
*コミット*
されます。コマンドによってエラーが発生した場合、サブトランザクションはロールバックされ、親トランザクションは通常に続行できます。その結果、1つのステートメントの実行中のエラーは、そのステートメントにのみ影響を与え、トランザクション全体のステータスには影響しません。

サブトランザクションをコミットすると、それが保持するリソースがその親トランザクションにのみ割り当てられます。これがトップレベルのトランザクションである場合があります。または、ユーザー定義のセーブポイントが関係する場合、それは他のサブトランザクションである可能性があります。したがって、これは「自律トランザクション」ではありません。サブトランザクションをロールバックすると、取得したロックなど、保持しているすべてのリソースが解放されます。
