如何在PostgreSQL中将唯一约束转换为主键?

时间:2014-10-14 16:29:20

标签: sql postgresql

我有一个表在某些列上有一个主键,在另一列上有另一个唯一约束。我删除了旧的主键,现在想要将现有的唯一约束作为表的新主键,而不是从头开始删除/重建它。

现在的情况是这样的:

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;,同样的错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以在创建新约束之前删除已存在的约束,但删除约束也会使索引消失。

但是,您可以创建新索引CONCURRENTLYexample 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的文档中明确提及。