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”是日期。
对于authenticator
和method
,使用简单的唯一约束。text 和 varchar() 在索引方面是相同的。
这意味着三个 alter table 语句而不是一个,但它应该可以避免这些问题。Box 应该正确支持 GiST,所以你应该可以很好地做到这一点。
用简单的英语来说,该错误告诉您该数据类型不支持该索引类型所期望的索引操作。因此,例如,无法通过索引搜索文本字符串是否重叠。换句话说,三者不能放在同一个约束中。
此外,请记住,UNIQUE 约束比排除约束更快,因此在它们起作用的地方是首选。
归档时间: |
|
查看次数: |
6082 次 |
最近记录: |