CREATE INDEX idx_leaderboads_values_gist ON leaderboard_entry USING gist (id_leaderboard,value);
我收到了这个错误:
ERROR: data type uuid has no default operator class for access method
“gist”HINT: You must specify an operator class for the index or define a
default operator class for the data type.
btree_gist现在也涵盖了数据类型uuid,如Paul commented.(以及其他一些数据类型,非常类似于枚举类型.)
CREATE EXTENSION btree_gist;
然后你的索引应该工作.
有关:
> Exclusion constraint on a bitstring column with bitwise AND operator
> Creating multicolumn index in PostgreSQL,containing both scalar and array columns
Postgres 9.6或更高版本
(原始答案.)
通常我建议使用附加模块btree_gist,但uuid
型不在其中.
理论上,由于UUID是128位数量(per documentation),因此最有效的方法是将其转换为两个bigint或float8以用于索引.但是这些演员阵容都没有在标准的Postgres中定义.
我找到了stab in that direction in the pqsql-hackers list,但似乎没有成功.
剩下的选项是文本表示的函数GiST索引:
CREATE INDEX idx_leaderboads_values_gist ON leaderboard_entry USING gist (id_leaderboard,cast("value" AS text));
要使用此功能索引,查询必须与该表达式匹配.您可以在查询中使用简写“value”:: text(但不能在索引定义中使用,而不添加更多括号).
旁白:不要使用值作为列名,它是reserved word in standard SQL.
问题是:为什么需要GiST索引.最好的解决方案取决于目标.
原文地址:https://www.jb51.cc/postgresql/192146.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。