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

23001: restrict_violation

PostgreSQL

意味

SQL 標準の restrict_violation コード。重要: PostgreSQL は ON DELETE/ON UPDATE RESTRICT または NO ACTION で定義された外部キーの違反を、このコードではなく 23503 (foreign_key_violation) で報告する。実際には PostgreSQL 本体からこのコードを見ることはない。

原因

依存する子行を持つ親行を削除した、またはそのキーを変更した場合、PostgreSQL は 23503 を返す。23001 は通常、別のデータベースから移植したアプリケーションコードや、拡張機能のカスタムエラーとして現れる。NO ACTION とは異なり、RESTRICT はチェックをトランザクションの終了まで遅延できず、即座に失敗する。

対処方法

まず依存する子行を削除/更新するか、別の親に移す。その後、親行を処理する。業務ルールが許す場合は、外部キーを ON DELETE CASCADE または SET NULL で再定義することを検討する。一括削除では削除の順序 (先に子、次に親) を正しくする。

DBAtlas で開く →

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