Postgres 的唯一性约束不起作用
Postgres uniqueness constraint in is not working
我已经创建了一个新的 table,我正在从我的非 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
也许您可以使用 及其答案来获得您想要的。
我已经创建了一个新的 table,我正在从我的非 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
也许您可以使用