首页 > 解决方案 > Postgres 唯一性约束不起作用

问题描述

我已经创建了一个新表,并且正在从我的 no-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"
    />

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

标签: postgresqlliquibase

解决方案


您插入的至少一个值必须是 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

也许您可以使用这个问题及其答案来获得您想要的东西。


推荐阅读