我有一个表在某些列上有一个主键,在另一列上有另一个唯一约束。我删除了旧的主键,现在想要将现有的唯一约束作为表的新主键,而不是从头开始删除/重建它。
现在的情况是这样的:
Indexes:
"t_review_routing_id_key" UNIQUE CONSTRAINT, btree (id)
当我跑步时:
ALTER TABLE t_review_routing ADD PRIMARY KEY USING INDEX t_review_routing_id_key;
它说:
ERROR: index "t_review_routing_id_key" is already associated with a constraint
LINE 1: ALTER TABLE t_review_routing ADD PRIMARY KEY USING INDEX t_r...
我也尝试了ALTER TABLE t_review_routing ADD CONSTRAINT t_review_routing_id_pkey PRIMARY KEY USING INDEX t_review_routing_id_key;
,同样的错误。
有什么想法吗?
答案 0 :(得分:1)
您可以在创建新约束之前删除已存在的约束,但删除约束也会使索引消失。
但是,您可以创建新索引CONCURRENTLY
(example from the docs):
CREATE UNIQUE INDEX CONCURRENTLY dist_id_temp_idx ON distributors (dist_id);
ALTER TABLE distributors DROP CONSTRAINT distributors_pkey,
ADD CONSTRAINT distributors_pkey PRIMARY KEY USING INDEX dist_id_temp_idx;
此方法在ALTER TABLE ... ADD table_constraint_using_index
的文档中明确提及。