我有一个包含列idea_id
、element_id
和element_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列,则不能指定索引名称/定义,因为它将自动创建。参见文档