PostgreSQL,向现有表添加唯一约束而无需停机/锁定

dfty9e19  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(1)|浏览(166)

我试图找出最好的方法来向PostgreSQL数据库中的现有表添加新的varchar列,而不需要获取表锁或停机。
我知道我可以并发地添加一个索引,这将防止锁定。
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS "my_unique_index" ON "my_table" USING ("my_column", varchar_pattern_ops)
我不确定,也不能从文档中推断出的是,如果唯一索引已经存在,约束操作是否会获取表上的锁。
ALTER TABLE "my_table" ADD CONSTRAINT "my_unique_constraint" UNIQUE USING INDEX "my_unique_index";
我在文档中看到NOT VALID选项对于唯一约束没有用处。
任何建议将是伟大的。

pkwftd7m

pkwftd7m1#

首先创建一个唯一索引CONCURRENTLY,然后基于该索引添加一个约束,这种方法很好。ALTER TABLE将需要一个ACCESS EXCLUSIVE锁,但这只会保持很短的时间。除非数据库中总是有长时间运行的事务,否则这不会是一个问题--但在这种情况下,您已经有了问题。

相关问题