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

23P01: exclusion_violation

PostgreSQL

意味

EXCLUDE (排他) 制約に違反した。この制約タイプは、特定の演算子 (例: 範囲の重なり &&) に従って 2 つの行が競合することを防ぐ。挿入/更新された行が既存の行と競合するため拒否された。

原因

典型的には GiST ベースの EXCLUDE 制約が定義されており (例: 予約/会議室の予約で tstzrange && による時間の重なりを禁止)、新しい行が既存の行と重なる範囲/値を持つ。2 つの同時実行トランザクションが重なる範囲を挿入した場合にも発生する。

対処方法

挿入前にクエリで重なりを確認するか、アプリケーションでエラーを捕捉してユーザーに分かりやすいメッセージを表示する。該当する範囲/条件を照会し、競合する既存の行を特定する。業務ルールが重なりを許容する場合は制約を緩和し、そうでなければ入力を修正する。同時実行時には、トランザクションを安全に再試行して直列化する。

DBAtlas で開く →

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