postgresql - 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"
/>
但是当我随后添加相同的列时,所有列都被填充而没有问题。你能告诉我为什么会这样吗?
解决方案
您插入的至少一个值必须是 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
也许您可以使用这个问题及其答案来获得您想要的东西。
推荐阅读
- android - 解码器初始化失败:OMX.qcom.video.decoder.avc,
- sharepoint - SPFx:在清单 JSON 中加载架构时出现问题
- python - 行中的唯一值到具有条件的列标题
- javascript - React Native 平面列表
- ios - Tableview scrollToRow(at:at:animated) 导致 scrollViewDidScroll(_) 被多次调用
- python-3.x - 为什么按钮不连接?
- jquery - JQuery after() 特定的点击元素
- python - 如何在kivy中动态创建小部件?
- java - 在没有列表元素的情况下处理此动态自动建议下拉列表?硒
- javascript - 检测按键忽略修饰键