我不能直接使用带有gist索引的uuid
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry
USING gist
(id_leaderboard , value);
我收到了这个错误:
错误:数据类型uuid没有访问方法的默认运算符类 “要旨”
提示:您必须为索引指定运算符类或定义a 数据类型的默认运算符类。
答案 0 :(得分:10)
btree_gist现在也涵盖了数据类型uuid
,例如Paul commented。 (以及其他一些数据类型,尤其是所有enum
类型。)
现在您需要做的是:为每个数据库安装一次扩展程序:
CREATE EXTENSION btree_gist;
那么你的索引应该可以正常工作。
相关:
(原始答案。)
通常我会建议额外的模块btree_gist,但类型uuid
不。
理论上,由于UUID是a 128-bit quantity
(per documentation),因此最有效的方法是将其转换为两个bigint
或float8
。指数。但是这些演员阵容都没有在标准的Postgres中定义。
我找到了stab in that direction in the pqsql-hackers list,但似乎没有成功。
其余选项是text
表示的函数GiST索引:
CREATE INDEX idx_leaderboads_values_gist
ON leaderboard_entry USING gist (id_leaderboard, cast("value" AS text));
要使用此功能索引,查询必须与该表达式匹配。您可以在查询中使用简写"value"::text
(但不能在索引定义中使用,而不添加更多括号)。
除此之外:不要将value
用作列名,而是reserved word in standard SQL。
问题是:为什么您需要GiST索引吗?最好的解决方案取决于目标。
答案 1 :(得分:1)
如果您正在使用Postgres 10,并且使用转储/恢复从先前版本迁移数据库,则可能需要运行:
ALTER EXTENSION btree_gist UPDATE;
为了让gist索引与UUID一起使用。