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つのステートメントの実行中のエラーは、そのステートメントのみに影響し、トランザクション全体のステータスには影響しません。

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