我在表格中添加新的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
?
答案 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
语法。