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



我有一个包含列idea_idelement_idelement_value的表ideas

最初,我使用这三列创建了一个复合主键(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

我做错了什么?

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

话虽如此,查询中还有另一个错误:如果要指定索引名称,则不能指定PK列(它们是从基础索引派生的(。如果要指定pk列,则不能指定索引名称/定义,因为它将自动创建。参见文档

最新更新