[英]How to use uuid with postgresql gist index type?
我不能直接使用uist和gist索引
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry
USING gist
(id_leaderboard , value);
我收到了这个错误:
错误:数据类型uuid没有访问方法“gist”的默认运算符类
提示:您必须为索引指定运算符类,或者为数据类型定义默认运算符类。
btree_gist现在也涵盖了数据类型uuid
,就像Paul评论的那样 。 (以及其他一些数据类型,非常重要的所有enum
类型。)
现在您需要做的是:每个数据库安装一次扩展:
CREATE EXTENSION btree_gist;
然后你的索引应该工作。
有关:
(原始答案。)
通常我建议使用附加模块btree_gist ,但uuid
类型不在其中。
理论上,由于UUID是a 128-bit quantity
( 每个文档 ),最有效的方法是将其转换为两个bigint
或float8
以用于索引。 但是这些演员阵容都没有在标准的Postgres中定义。
我在pqsql-hackers列表中找到了朝这个方向刺 ,但似乎没有成功。
剩下的选项是text
表示的函数GiST索引:
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry USING gist (id_leaderboard, cast("value" AS text));
要使用此功能索引,查询必须与该表达式匹配。 您可以在查询中使用简写"value"::text
(但不能在索引定义中使用,而不添加更多括号)。
旁白:不要将value
用作列名,它是标准SQL中的保留字 。
问题是: 为什么需要GiST指数。 最好的解决方案取决于目标。
如果您正在使用Postgres 10,并且使用转储/恢复从先前版本迁移数据库,则可能需要运行:
ALTER EXTENSION btree_gist UPDATE;
为了让gist索引与UUID一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.