中的Postgres唯一性约束不起作用



我已经创建了一个新表,并且正在插入来自非sql数据库的数据。

奇怪的是,我为它设置了唯一性约束

ALTER TABLE public.tablecolumns
ADD CONSTRAINT common_col UNIQUE (name, data_type, col_type, repeated, visibility, is_public, fieldowner);

Liquibase脚本

<addUniqueConstraint
columnNames="name, data_type, col_type, repeated, visibility, is_public, fieldowner"
constraintName="common_col"
tableName="tablecolumns"
/>

但是,当我随后添加相同的列时,所有列都被填充而没有问题。你能告诉我为什么会发生这种事吗?

您插入的值中必须至少有一个为NULL值。

当涉及到唯一约束时,SQL标准规定NULL值而不是被视为相等:

CREATE TABLE uniq (a integer, b integer, UNIQUE (a, b));
INSERT INTO uniq VALUES (1, 2);
INSERT INTO uniq VALUES (1, 2);
ERROR:  duplicate key value violates unique constraint "uniq_a_b_key"
DETAIL:  Key (a, b)=(1, 2) already exists.
INSERT INTO uniq VALUES (1, NULL);
INSERT INTO uniq VALUES (1, NULL);  -- works without error

也许你可以用这个问题和它的答案来得到你想要的。

最新更新