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

San*_*ejű 5 database postgresql exception

我尝试执行以下命令(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 &&
)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

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.
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ers 2

对于authenticatormethod,使用简单的唯一约束。text 和 varchar() 在索引方面是相同的。

这意味着三个 alter table 语句而不是一个,但它应该可以避免这些问题。Box 应该正确支持 GiST,所以你应该可以很好地做到这一点。

用简单的英语来说,该错误告诉您该数据类型不支持该索引类型所期望的索引操作。因此,例如,无法通过索引搜索文本字符串是否重叠。换句话说,三者不能放在同一个约束中。

此外,请记住,UNIQUE 约束比排除约束更快,因此在它们起作用的地方是首选。