我正在使用 PostgreSQL,我想强制特定列是唯一的。
但是此表有一些遗留数据,其中存在重复的列,并且 它们必须保留不变。
因此,当我尝试强制执行约束时,它会抛出错误,表示该表已经违反了约束并且该规则不可强制执行。
如何从现在开始对数据库强制实施唯一约束,而不删除旧的重复记录?
但是,您可以使用过程引用完整性来执行此操作(使用触发器)。
OID 不保证唯一,也不保证增量顺序,请参阅此
post。
您可以添加新列,输入布尔值,exclude_from_uniqueness
。对于现有记录(或您想要允许重复的任何记录)设置为 True,并为所有其他记录保留 null 或 false。最后仅为未排除的行创建部分唯一索引:
create unique index pseudo_uk on mytable(myfield) where exclude_from_uniqueness is distinct from true;