25P02: in_failed_sql_transaction
PostgreSQL意味
トランザクション内ですでにエラーが発生しており、以降のコマンドは実行できない。トランザクションはアボート状態にあり、ROLLBACK のみ受け付けられる。
原因
トランザクションブロック内の前の文が失敗した (例: 制約違反) にもかかわらず、同じトランザクションに新しいコマンドが送られ続けている。アプリケーションがエラーを捕捉せずにトランザクションを続行している。
対処方法
トランザクションをロールバックする: ROLLBACK し、改めて開始する。ブロックのエラーを切り離して続行したい場合は SAVEPOINT を使い、ROLLBACK TO SAVEPOINT でその地点に戻る。アプリケーションでは各文のエラーを捕捉し、トランザクションを適切に管理する (コミット/ロールバックの判断を明示する)。