在PostgreSQL中索引自定义范围类型的数组

时间:2016-04-07 01:34:27

标签: arrays database postgresql indexing custom-type

我创建了自定义范围类型:

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 []没有默认的运算符类   访问方法"杜松子酒"提示:您必须为。指定运算符类   索引或定义数据类型的默认运算符类。

如何让它发挥作用?

1 个答案:

答案 0 :(得分:1)

当您尝试索引任何内置范围类型f.ex时,会抛出相同的错误消息。 run()。这是因为范围数组没有built-in GIN operator class。 (GiSTSP-GiST也没有运算符类。

您应该尝试重新构建数据,f.ex。进入一对多关系,其中每个int4range行可以有多个条目(让我们说)vendors,你可以使用一个简单的范围(不是它们的数组) )。在这种情况下,您可以索引范围。