我有一个复合类型。而且我想在其上定义排除约束,该约束也可以与范围排除结合使用,但是会出现以下错误。
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”复合类型定义运算符类?
答案 0 :(得分:0)
定义一个新的GiST运算符类很复杂。您必须定义support functions和匹配策略。有关使用C函数如何完成此操作的示例,请参见the documentation。
但是我认为,不将类型为example_t
的列包括在排除约束中,而是将各个元素id.x
和id.y
包括在内会简单得多。这样,您可能可以与btree_gist
contrib模块中定义的运算符类相处。