transaction_rollback_scope parameter#
データベース内のトランザクションロールバックスコープを設定するには、
transaction_rollback_scope パラメーターを使用します。
transaction_rollback_scope パラメーターには、2つの値があります。
transaction—標準のPostgres動作。各エラーはトランザクション全体を中止します。statement— 1つのステートメントの実行中のエラーは、そのステートメントにのみ影響を及ぼし、トランザクション全体のステータスには影響しません。
パラメーターの設定#
パラメーターをユーザーレベルのプロパティ、接続オプション、または特定のファンクションまたはプロシージャーのモードとして設定できます。
パラメーターをユーザーレベルのプロパティとして設定します#
ALTER USER somebody SET transaction_rollback_scope TO statement;
パラメーターを接続オプションとして設定する#
PGOPTIONS="-c transaction_rollback_scope=statement" psql <other options>
特定のファンクションまたはプロシージャのモードを設定する#
PL/pgSQLを使用する場合、特定のファンクションまたはプロシージャのモードを設定できます。
ALTER FUNCTION myfunc SET transaction_rollback_scope TO statement;
サブトランザクションの処理方法#
statement
値を選択した場合、各SQLコマンドの直前にサブトランザクションが開きます。コマンドが成功した場合、サブトランザクションは
コミット
されます。コマンドによってエラーが発生した場合、サブトランザクションはロールバックされ、親トランザクションは通常に続行できます。その結果、1つのステートメントの実行中のエラーは、そのステートメントにのみ影響を与え、トランザクション全体のステータスには影響しません。
サブトランザクションをコミットすると、それが保持するリソースがその親トランザクションにのみ割り当てられます。これがトップレベルのトランザクションである場合があります。または、ユーザー定義のセーブポイントが関係する場合、それは他のサブトランザクションである可能性があります。したがって、これは「自律トランザクション」ではありません。サブトランザクションをロールバックすると、取得したロックなど、保持しているすべてのリソースが解放されます。