【发布时间】:2021-06-16 06:27:05
【问题描述】:
我在 Postgres 数据库中有一个累积重复值的现有表。我们已经清除了表格并重新填充了值,但希望防止再次发生重复。因此我们需要添加一个约束。
表名:camembert,样本数据:
| handle | id | num |
| ------ | --- | ----- |
| 259 | 869 | AC003 |
| 259 | 869 | AC003 |
| 259 | 869 | AC003 |
| 259 | 856 | AC005 |
| 259 | 856 | AC005 |
| 259 | 856 | AC005 |
etc.
下面是这个问题的一个例子(我们实际上是一式三份)
约束应该允许前两列具有重复值,但是,第三列是使行唯一的微分器。例如,当表格被正确填充时,它看起来如下:
| handle | id | num |
| ------ | ----- | ----- |
| 259 | 869 | AC003 |
| 259 | 856 | AC005 |
| 259 | 856 | AC007 |
| 47138 | 41085 | AC003 |
| 47138 | 41085 | AC005 |
| 47138 | 43513 | AC007 |
我尝试了以下脚本:
ALTER TABLE camembert ADD CONSTRAINT num_uniq UNIQUE (num);
但出现错误:
ERROR: could not create unique index "num" Detail: Key (num)=(AC003) is duplicated.
我对唯一约束有什么误解?解开这个谜题的关键语句是什么?
【问题讨论】:
-
@a_horse_with_no_name,不唯一性超过三列(句柄,id,num),因此可以有重复的 num 值。解决方案是 JGH 的答案。
标签: sql postgresql database-design unique-constraint