DBAtlas · データベース運用アトラス

25001: active_sql_transaction

PostgreSQL

意味

トランザクションの外、またはトランザクションの開始時にしか実行できないコマンドが、トランザクションがアクティブな状態で呼び出された。一部のコマンドはトランザクションブロック内で実行できない。

原因

SET TRANSACTION ISOLATION LEVEL などの設定は、ブロック内の最初のクエリより前に発行する必要がある ('SET TRANSACTION ISOLATION LEVEL must be called before any query')。同様に、一部のコマンドは開いている BEGIN/トランザクション内で拒否される。通常、アプリケーションが autocommit を無効にして暗黙にトランザクションを開始していることが原因。

対処方法

トランザクションレベルの設定は、クエリを実行する前のトランザクションの冒頭で発行する: BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ... クライアントライブラリが暗黙のトランザクションを開いていないか (autocommit の設定) を確認する。トランザクションブロック内で実行できないコマンドの場合は、先に COMMIT/ROLLBACK で現在のトランザクションを閉じる。

DBAtlas で開く →

同じデータベースの他の項目