我创建了自定义范围类型:
G_admin
它工作正常,我可以用GiST索引它。
但是,我现在希望索引这种类型的数组:smallintrange []
无论我是尝试GiST还是GIN,我都会得到这个:
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
);
错误:数据类型smallintrange []没有默认的运算符类 访问方法"杜松子酒"提示:您必须为。指定运算符类 索引或定义数据类型的默认运算符类。
如何让它发挥作用?
答案 0 :(得分:1)
当您尝试索引任何内置范围类型f.ex时,会抛出相同的错误消息。 run()
。这是因为范围数组没有built-in GIN operator class。 (GiST或SP-GiST也没有运算符类。
您应该尝试重新构建数据,f.ex。进入一对多关系,其中每个int4range
行可以有多个条目(让我们说)vendors
,你可以使用一个简单的范围(不是它们的数组) )。在这种情况下,您可以索引范围。