我创建了一个自定义范围类型:
CREATE OR REPLACE FUNCTION smallint_subtype_diff(x smallint, y smallint) RETURNS float8 AS
'SELECT (x - y)::float8' LANGUAGE sql STRICT IMMUTABLE;
CREATE TYPE smallintrange AS RANGE (
subtype = smallint,
subtype_opclass = int2_ops,
subtype_diff = smallint_subtype_diff -- required by GiST
);
它工作正常,我可以使用GiST将其编入索引。
但是,我现在希望索引这种类型的数组:smallintrange []
无论我尝试GiST还是GIN,我都会得到:
CREATE INDEX ix_Vendors_OpenTimes ON public.Vendors USING gin (OpenTimes);
错误:数据类型smallintrange []没有访问方法“ gin”的默认操作符类提示:您必须为索引指定一个操作符类或为该数据类型定义一个默认操作符类。
我该如何工作?
当您尝试索引任何内置范围类型f.ex时,会引发相同的错误消息。int4range
。这是因为范围数组没有内置的GIN运算符类。(也没有GiST或SP-GiST的运算符类)。
您应该尝试重新构建数据,例如f.ex。进入一对多关系,其中每一vendors
行可以在(假设)中有多个条目vendor_ranges
,您可以在其中使用简单范围(而不是它们的数组)。在这种情况下,您可以索引您的范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句