postgresql 数据类型字符变化没有访问方法“gist”的默认运算符类

k2fxgqgv  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(180)

我尝试执行以下命令(PostgreSQL):

ALTER TABLE authentication ADD CONSTRAINT overlapping_times EXCLUDE USING GIST
(method with =,
 authenticator with =,
 box(point(extract(epoch FROM validfrom at time zone 'UTC'),extract(epoch FROM validfrom at time zone 'UTC') ),
     point(extract(epoch FROM validuntil at time zone 'UTC'), extract(epoch FROM validuntil at time zone 'UTC'))) WITH &&
)

我得到了以下错误消息:

ERROR:  data type character varying 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.

我做了相当广泛的谷歌搜索,但我仍然无法翻译成简单的英语。我应该怎么做才能执行上面的命令?“方法”的类型是字符变化的,“验证器”是文本,“有效期”,“有效期”是日期。

ulydmbyx

ulydmbyx1#

对于authenticatormethod,使用普通的唯一约束。text和varchar()用于索引目的是相同的。
这意味着三个alter table语句而不是一个,但它应该可以保存这些问题。盒子应该支持GiST正确,所以你应该是好的。
简单地英语,错误是告诉您数据类型不支持索引类型所需的索引操作。因此,文本字符串不能通过索引来搜索它们是否重叠。换句话说,这三个不能放在同一个约束中。
此外,请记住UNIQUE约束比排除约束更快,因此在它们工作的地方是首选的。

3bygqnnd

3bygqnnd2#

在我的情况下,只需要先安装扩展:

CREATE EXTENSION btree_gist;

相关问题