我尝试执行以下命令 (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.
我做了相当广泛的谷歌搜索,但我仍然无法将其翻译成简单的英语。我应该怎么做才能执行上面的命令? “method”的类型是字符变化,“authenticator”是文本,“validfrom”,“validuntil”是日期。
最佳答案
对于authenticator
和method
,使用普通的唯一约束。出于索引目的,text 和 varchar() 是相同的。
这意味着三个 alter table 语句而不是一个,但它应该可以避免这些问题。 Box 应该适本地支持 GiST,所以你应该在那里做得很好。
用简单的英语来说,错误是告诉您数据类型不支持索引类型所期望的索引操作。因此,无法通过索引来搜索文本字符串,例如它们是否重叠。也就是说三者不能放在同一个约束条件下。
此外,请记住 UNIQUE 约束比排除约束更快,因此在它们工作的地方更受欢迎。
关于database - 数据类型字符变化没有访问方法 "gist"的默认运算符类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500739/