44000: with_check_option_violation
PostgreSQL意味
WITH CHECK OPTION で定義されたビューを通じた INSERT/UPDATE が、結果の行がビューの WHERE 条件を満たさなくなるため拒否された。ビューは自身のフィルタから外れる行の書き込みを防ぐ。
原因
更新可能なビューが WITH CHECK OPTION で定義されており、書き込みによって行がビューの定義条件から外れる (例: ビューが status='active' でフィルタしているのに行を 'inactive' に設定する)。行レベルセキュリティ (RLS) のポリシーでも同様のチェックが発生することがある。
対処方法
書き込む値がビューの WHERE 条件を満たすようにするか、(権限が許せば) ビューではなくベーステーブルに対して直接操作を行う。業務ルールで行がフィルタから外れることを許容する場合は、WITH CHECK OPTION なしでビューを再定義する。RLS の場合は、ポリシーの WITH CHECK 式を見直す。