PostgreSQL - 添加CONSTRAINT UNIQUE并且不验证现有数据

时间:2016-10-17 14:18:24

标签: sql postgresql

我在表格中添加新的CONSTRAINT时遇到了一个小问题 我想添加UNIQUE CONSTRAINT并且不验证表格中的现有数据。

我在现有数据中有一些重复项,我想保留原样。

我写了一个查询:

ALTER TABLE tbl1 
   ADD CONSTRAINT unique_const UNIQUE (fld1, fld2) NOT VALID;

但它没有用,我收到了一个错误:

  

UNIQUE constraints cannot be marked NOT VALID

我也尝试删除所有TIGGERS

ALTER TABLE tbl1 DISABLE TRIGGER all;
ALTER TABLE tbl1 ADD CONSTRAINT unique_const UNIQUE (fld1, fld2);
ALTER TABLE tbl1 ENABLE TRIGGER all;

但它也行不通。

有没有人知道如何在不验证现有行的情况下添加UNIQUE CONSTRAINT

2 个答案:

答案 0 :(得分:0)

根据documentation of PostgreSQL 9.6,遗憾的是NOT VALID选项目前仅允许使用外键和CHECK约束。 This StackOverflow thread here可能是相关的,并提供替代解决方案的想法/基本方法,尽管它来自2014年。

答案 1 :(得分:0)

如果您可以专门识别约束应忽略的那些行,则可以添加部分唯一索引:

CREATE UNIQUE INDEX ON table (columns) WHERE some_condition;

如果您没有现有的直接条件,则可能需要向表中添加一列以标识应忽略的那些行(使用适当的默认值以便计算新行)。

不确定是否存在等效的ALTER TABLE语法。