【问题标题】:add uniqueness constraint when there are already duplicate old records当已有重复的旧记录时添加唯一性约束
【发布时间】:2016-10-20 16:03:36
【问题描述】:

假设我有一张桌子 :employers 和 :employee。我想添加以下内容:

ALTER TABLE employers ADD UNIQUE (employee_id);

这在开发中运行良好,但由于生产中已经存在重复记录,因此无法在生产中运行。

有没有办法添加唯一性约束的序列号,即只对新记录施加唯一性约束?

【问题讨论】:

  • 您需要先删除重复项,然后才能创建约束
  • 问题的语义模糊。如果一条新记录与一条或多条旧记录冲突怎么办?
  • 如果新记录与旧记录冲突,则会出现唯一性错误。我只是不想弄乱可能有重复的现有记录。

标签: sql postgresql unique-constraint


【解决方案1】:

创建部分唯一索引

create unique index index_unique_employer_id on employers(employer_id)
where employer_id > 10

https://www.postgresql.org/docs/current/static/sql-createindex.html

【讨论】:

  • 这通常是个坏主意。修复重复数据要好得多。您可能会发现存在插入重复项的代码,这可能会导致生产出现问题。特别是如果多个不同的应用程序/导入插入数据并且每个的设计不同。您可能会发现某些东西是插入而不是更新。了解导致重复的原因并知道您已经修复了原因至关重要,因为如果这是一个独特的字段,那么如果您不修复当前拥有的不良数据,那么报告和导出也会出现问题。跨度>
  • 谢谢!修复重复数据是不可行的,因为它们是有效的。它更像是业务逻辑的变化,而不是糟糕的数据。这样, whereemployer_id > 10 会是一个好的解决方案吗?
猜你喜欢
  • 2022-01-17
  • 2019-12-24
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多