无法使用已创建的索引创建主键

Cannot create primary key using already created index

我有一个 table ideasidea_idelement_idelement_value.

最初,我使用所有三列创建了一个复合主键 (ideas_pkey),但我开始面临与主键关联的索引的大小限制问题,因为 element_value 列有一个巨大的价值。

因此,我创建了另一个唯一索引,对可能具有较大值的列进行哈希处理

CREATE UNIQUE INDEX ideas_pindex ON public.ideas USING btree (idea_id, element_id, md5(element_value))

现在我删除了初始主键 ideas_pkey 并想像这样使用这个新创建的索引重新创建它

alter table ideas add constraint ideas_pkey PRIMARY KEY ("idea_id", "element_id", "element_value") USING INDEX ideas_pindex;

但是失败并出现以下错误

ERROR:  syntax error at or near "ideas_pindex"
LINE 2: ...a_id", "element_id", "element_value") USING INDEX ideas_...
                                                             ^
SQL state: 42601
Character: 209

我做错了什么?

主键索引不能是函数索引。您可以只在 table 上创建一个唯一索引,或者创建另一个列来存储较大列的 md5() 并在 PK 中使用它。

也就是说,您的查询中还有另一个错误:如果要指定索引名称,则不能指定 PK 列(它们是从基础索引派生的)。如果你想指定 pk 列,你不能指定索引 name/definition,因为它会自动创建。见 doc