gpt4 book ai didi

postgresql - 如何将 uuid 与 postgresql gist 索引类型一起使用?

转载 作者:行者123 更新时间:2023-11-29 11:19:09 24 4
gpt4 key购买 nike

我不能直接使用 uuid 和 gist 索引

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.

最佳答案

Postgres 10 或更新版本

btree_gist 现在也涵盖了数据类型 uuid,就像 Paul commented 一样。 (以及一些其他数据类型,特别是所有 enum 类型。)

现在您只需为每个数据库安装一次扩展:

CREATE EXTENSION btree_gist;

那么您的索引应该就可以正常工作了。

相关:

Postgres 9.6 或更早版本

(原始答案。)
通常我会建议额外的模块 btree_gist ,但是类型 uuid 被它覆盖。

理论上,由于 UUID 是 128 位的数量 ( per documentation ),最有效的方法是将其转换为两个 bigintfloat8 用于索引的目的。但是这些转换都没有在标准 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 索引。最佳解决方案取决于目标。

关于postgresql - 如何将 uuid 与 postgresql gist 索引类型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22720130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com