繁体   English   中英

如何在postgresql gist索引类型中使用uuid?

[英]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”的默认运算符类

提示:您必须为索引指定运算符类,或者为数据类型定义默认运算符类。

Postgres 10或更新

btree_gist现在也涵盖了数据类型uuid ,就像Paul评论的那样 (以及其他一些数据类型,非常重要的所有enum类型。)

现在您需要做的是:每个数据库安装一次扩展:

CREATE EXTENSION btree_gist;

然后你的索引应该工作。

有关:


Postgres 9.6或更高版本

(原始答案。)
通常我建议使用附加模块btree_gist ,但uuid类型不在其中。

理论上,由于UUID是a 128-bit quantity每个文档 ),最有效的方法是将其转换为两个bigintfloat8以用于索引。 但是这些演员阵容都没有在标准的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM