postgresql 带唯一约束的Postgres哈希索引

k4aesqcs  于 2023-05-28  发布在  PostgreSQL
关注(0)|答案(4)|浏览(158)

随着Postgres 10正确支持哈希索引,我想使用哈希索引进行id查找(哈希索引与btree相比大小更小,理论上更快)。
我有一张table

create table t (id int);
create unique index on t using hash (id);

但我得到了以下信息:
ERROR: access method "hash" does not support unique indexes
为什么哈希索引不允许唯一约束?有没有办法规避这一点?

yshpjwxd

yshpjwxd1#

The documentation没有留下任何怀疑的余地:
目前,只有B树索引可以声明为唯一的。
最近有一个关于discussion on the hackers list的讨论,结论是添加允许UNIQUE哈希索引的功能并不简单。

v2g6jxz6

v2g6jxz62#

您可以使用排除约束来实现此目的:

create table t (id int);
alter table t add constraint c exclude using hash (id with =);
jutyujz0

jutyujz03#

为什么不简单地为这个列添加一个约束呢?

create table t (id int);
create index on t using hash (id);

-- simply create a new constraint for this column, do not mix it with hash index
alter table t add constraint unique_id unique (id);
oalqel3c

oalqel3c4#

非常古老的想法
在链接上创建唯一索引(cast(md5(url)as uuid));
我现在正在试
UPD。它很慢,就像它在每次插入时都要重新计算每个和。

相关问题