如何在PostgreSQL中为复合类型定义运算符类?

时间:2018-06-25 14:49:58

标签: postgresql gist compositetype range-types

我有一个复合类型。而且我想在其上定义排除约束,该约束也可以与范围排除结合使用,但是会出现以下错误。


create type example_t as (
    x uuid,
    y text
);

create table example (
    id example_t not null,
    time tstzrange not null,

    exclude using gist (id with =, time with &&)
);

ERROR: data type example_t has no default operator class for access method "gist" HINT: You must specify an operator class for the index or define a default operator class for the data type. SQL state: 42704

如何为“ example_t”复合类型定义运算符类?

1 个答案:

答案 0 :(得分:0)

定义一个新的GiST运算符类很复杂。您必须定义support functions和匹配策略。有关使用C函数如何完成此操作的示例,请参见the documentation

但是我认为,不将类型为example_t的列包括在排除约束中,而是将各个元素id.xid.y包括在内会简单得多。这样,您可能可以与btree_gist contrib模块中定义的运算符类相处。