You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 14.4使用UNIQUE NULLS NOT DISTINCT报语法错误求助

问题解答

错误原因

PostgreSQL 14.4版本不支持UNIQUE NULLS NOT DISTINCT语法,这个特性是PostgreSQL 15才正式引入的,14及更低版本没有对应的配置项可以启用该语法,所以执行时会触发语法错误。

替代实现方案

根据你的需求(同一code搭配不同sub_code可重复,但无sub_code的code仅能存在一条),可以用以下两种方式实现:

方式1:部分唯一索引

直接创建仅对sub_code IS NULL生效的唯一索引,精准限制无sub_code时的code唯一性:

CREATE UNIQUE INDEX idx_codes_code_null_subcode ON codes (code) WHERE sub_code IS NULL;

这种方式只约束sub_code为空的行,sub_code非空时,同一code可以搭配任意不同的sub_code,完全匹配你的需求。

方式2:函数式唯一索引

通过COALESCE将NULL转换为一个特殊标记值,创建包含转换后值的唯一索引:

CREATE UNIQUE INDEX idx_codes_code_subcode ON codes (code, COALESCE(sub_code, '<unique-null-marker>'));

这种方式会把所有sub_code为NULL的行视为同一个组合,从而确保同一code下只能有一条sub_code为空的记录,同时允许非空sub_code的组合自由存在。

内容的提问来源于stack exchange,提问作者Touring Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:18:37