gpt4 book ai didi

arrays - uuid 数组上的 PostgreSQL GIN 索引

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

我想在 uuid[] 上使用 GIN 索引(以便对 uuid 数组进行高效的成员资格测试)。然而,当我尝试它时,PostgreSQL 给了我一个错误:

mydb=> CREATE TABLE foo (val uuid[]);
CREATE TABLE
mydb=> CREATE INDEX foo_idx ON foo USING GIN(val);
ERROR: data type uuid[] has no default operator class for access method "gin"
HINT: You must specify an operator class for the index or define a default operator class for the data type.

如何添加必要的运算符类使其正常工作?

请注意 this是类型 citext 的类似问题,但提供的答案不起作用。

最佳答案

注意:这个答案已经过时,因为它现在是标准 PostgreSQL 的一部分,请参阅 tbussmann 的其他答案(您应该投票)。

原答案:

这可以使用以下运算符类来完成:

CREATE OPERATOR CLASS _uuid_ops DEFAULT 
FOR TYPE _uuid USING gin AS
OPERATOR 1 &&(anyarray, anyarray),
OPERATOR 2 @>(anyarray, anyarray),
OPERATOR 3 <@(anyarray, anyarray),
OPERATOR 4 =(anyarray, anyarray),
FUNCTION 1 uuid_cmp(uuid, uuid),
FUNCTION 2 ginarrayextract(anyarray, internal, internal),
FUNCTION 3 ginqueryarrayextract(anyarray, internal, smallint, internal, internal, internal, internal),
FUNCTION 4 ginarrayconsistent(internal, smallint, anyarray, integer, internal, internal, internal, internal),
STORAGE uuid;

归功于 this为我指明了正确的方向。

相关文档在Interfacing extensions to indexes ,特别是那里描述了 GIN 的运算符策略和函数编号。

关于arrays - uuid 数组上的 PostgreSQL GIN 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19959735/

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