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