23P01: exclusion_violation
PostgreSQL含义
违反了 EXCLUDE(排除)约束。此类约束根据特定运算符(例如范围重叠 &&)防止两行发生冲突;插入/更新的行因与现有行冲突而被拒绝。
原因
通常定义了基于 GiST 的 EXCLUDE 约束(例如在预约/会议室预订中用 tstzrange && 禁止时间重叠),而新行的范围/值与现有行重叠。两个并发事务插入重叠范围时也会出现。
解决方法
插入前用查询检查是否重叠,或在应用中捕获该错误并向用户显示有意义的消息。查询相关的范围/条件,找出冲突的现有行。如果业务规则允许重叠,放宽约束;否则修正输入。在并发情况下,安全地重试事务以使其串行化。