这里是我的表:PostgreSQL的指数阵列 - 运营商定制类
CREATE TABLE
mytable
(
id INT NOT NULL PRIMARY KEY,
val int4range[]
);
我想索引的VAL列:
CREATE INDEX
ix_mytable_val
ON mytable
USING GIN (INT4RANGE(val, '[]')); // error, as is GIN(val)
我想出了以下内容:
CREATE OPERATOR CLASS gin_int4range_ops
DEFAULT FOR TYPE int4range[] USING gin AS
OPERATOR 1 <(anyrange,anyrange),
OPERATOR 2 <=(anyrange,anyrange),
OPERATOR 3 =(anyrange,anyrange),
OPERATOR 4 >=(anyrange,anyrange),
OPERATOR 5 >(anyrange,anyrange),
FUNCTION 1 lower(anyrange),
FUNCTION 2 upper(anyrange),
FUNCTION 3 isempty(anyrange),
FUNCTION 4 lower_inc(anyrange),
FUNCTION 5 upper_inc(anyrange);
但是,当我尝试创建索引,它失败(错误如下)。但是,如果我从DO $$块中调用create,它会执行。
如果创建索引执行,我得到INSERT INTO上的错误,而不是。
"ERROR: cache lookup failed for type 1"
我也试过这样:
OPERATOR 1 &&(anyrange,anyrange),
OPERATOR 2 <@(anyrange,anyrange),
OPERATOR 3 @>(anyrange,anyrange),
OPERATOR 4 =(anyrange,anyrange),
为了试图解决这个问题,我已经重新启动PG,机器,并用吸尘器DB。我相信在CREATE OPERATOR代码中有一个错误。
如果我可以索引自定义类型(int,int4range)的数组,那会更好。
我花了相当一段时间(整整一天)在文档,论坛等等中涉水,但没有找到真正有助于我理解如何解决这个问题(即创建一个自定义操作员类)的东西。
谢谢了!当我尝试创建索引时,出现“错误:类型1的缓存查找失败”。我确实重新启动了服务器。有任何想法吗? – IamIC
你的代码在我的数据库中运行正常...试图找出。 – revoua
我试过了我能想到的所有东西,但仍然得到这个错误。 – IamIC