DBAtlas · 数据库运维图谱

23001: restrict_violation

PostgreSQL

含义

SQL 标准中的 restrict_violation 代码。重要:对于定义为 ON DELETE/ON UPDATE RESTRICT 或 NO ACTION 的外键,PostgreSQL 报告违反时使用的不是此代码,而是 23503(foreign_key_violation);实际上您不会从 PostgreSQL 核心看到此代码。

原因

删除带有依赖子行的父行或更改其键时,PostgreSQL 返回 23503。23001 通常出现在从其他数据库移植过来的应用代码中,或作为扩展的自定义错误。与 NO ACTION 不同,RESTRICT 不能将检查推迟到事务结束,会立即失败。

解决方法

先删除/更新依赖的子行或将其移到另一个父行下;然后再处理父行。如果业务规则允许,考虑以 ON DELETE CASCADE 或 SET NULL 重新定义外键。在批量删除时,采用正确的删除顺序(先子后父)。

在 DBAtlas 中打开 →

同一数据库的其他条目