SuperAPI AI 工具集

postgres-errors-constraint-violations

数据与分析

查看项目

更新于 10-15 22:18

技能介绍

用途:该技能用于处理 PostgreSQL 写入时触发的完整性约束错误(SQLSTATE 类 23),包括 23505 唯一约束、23503 外键、23502 非空、23514 CHECK、23P01 排他、23001 RESTRICT。主张从模式或应用层修复,而不是压制错误。

主要能力:提供按 SQLSTATE 分支的决策树;区分 23503 在插入/更新(父行缺失)与删除父行(子行引用)时的不同含义;给出外键 ON DELETE 动作选择(CASCADE、SET NULL、SET DEFAULT、RESTRICT、NO ACTION 可延迟)。

必要用法:先读错误 DETAIL 行,确认确切约束名与冲突键值;预期冲突用 INSERT ... ON CONFLICT (cols) DO UPDATE SET c = EXCLUDED.c 或 DO NOTHING,不能用捕获 23505 后 UPDATE 的写法;外键引用列需手动 CREATE INDEX ON order_items (order_id);循环引用用 DEFERRABLE INITIALLY DEFERRED;大表加约束先 NOT VALID,再 VALIDATE CONSTRAINT。

适用场景:幂等或 upsert 插入、删除被阻塞、循环引用插入、在线为大表添加约束。限制:不适用于 40P01 死锁、40001 序列化失败、UPSERT/MERGE 语法设计或 DDL 锁等待;ON CONFLICT 不支持 EXCLUDE 约束作为仲裁目标。NOT NULL 与 CHECK 不能延迟,NOT VALID 仅限外键和 CHECK。官方文档见 https://www.postgresql.org/docs/17/ddl-constraints.html 与 errcodes-appendix.html。