PostgreSQL创建带NULL过滤条件的唯一约束报语法错如何解决
报错原因
PostgreSQL 原生的 UNIQUE 约束语法不支持直接附加 WHERE 条件实现部分范围的唯一性校验,你写的SQL语句不符合ALTER TABLE ADD CONSTRAINT的语法规范,因此触发语法报错。
修复方案
要实现"仅未购买(purchased_at为NULL)的车辆,user_id和name组合唯一"的需求,使用部分唯一索引即可,效果和你预期的唯一约束完全一致,写法如下:
CREATE UNIQUE INDEX cars_user_id_name_purchased_at_key ON cars (user_id, name) WHERE purchased_at IS NULL;
执行后就会自动生效:未购买的车辆不允许出现user_id和name重复的记录,已经购买(purchased_at非空)的记录不受该规则限制。
内容的提问来源于stack exchange,提问作者Nona
相关产品推荐
相关产品推荐

