随着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
为什么哈希索引不允许唯一约束?有没有办法规避这一点?
随着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
为什么哈希索引不允许唯一约束?有没有办法规避这一点?
4条答案
按热度按时间yshpjwxd1#
The documentation没有留下任何怀疑的余地:
目前,只有B树索引可以声明为唯一的。
最近有一个关于discussion on the hackers list的讨论,结论是添加允许
UNIQUE
哈希索引的功能并不简单。v2g6jxz62#
您可以使用排除约束来实现此目的:
jutyujz03#
为什么不简单地为这个列添加一个约束呢?
oalqel3c4#
非常古老的想法
在链接上创建唯一索引(cast(md5(url)as uuid));
我现在正在试
UPD。它很慢,就像它在每次插入时都要重新计算每个和。