我尝试执行以下命令(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.
我做了相当广泛的谷歌搜索,但我仍然无法翻译成简单的英语。我应该怎么做才能执行上面的命令?“方法”的类型是字符变化的,“验证器”是文本,“有效期”,“有效期”是日期。
2条答案
按热度按时间ulydmbyx1#
对于
authenticator
和method
,使用普通的唯一约束。text和varchar()用于索引目的是相同的。这意味着三个alter table语句而不是一个,但它应该可以保存这些问题。盒子应该支持GiST正确,所以你应该是好的。
简单地英语,错误是告诉您数据类型不支持索引类型所需的索引操作。因此,文本字符串不能通过索引来搜索它们是否重叠。换句话说,这三个不能放在同一个约束中。
此外,请记住UNIQUE约束比排除约束更快,因此在它们工作的地方是首选的。
3bygqnnd2#
在我的情况下,只需要先安装扩展: