向现有 postgres 索引添加唯一约束的性能影响

Performance impact of adding unique constraint to existing postgres index

我们在 postgres 中有一个相当大的 table,在一些重构过程中,我们意识到现有 UUID 列上有一个索引,但它缺少唯一约束。

有没有人有应用 ALTER TABLE ... ADD CONSTRAINT ala https://www.postgresql.org/docs/9.4/indexes-unique.html 的经验,运行时的影响是什么?

尝试评估实时执行此操作与停机对运行时的影响。我们已经在数据库副本上对其进行了测试,但是很难模拟生产流量负载,只是在寻找一些东西来检查是否有人有经验。

要在不停机的情况下完成,您应该分两步完成:

  1.  CREATE UNIQUE INDEX CONCURRENTLY idx_name ON table_name (id);
    
  2.  ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(id) 
     USING INDEX idx_name;