[英]What does exclusion constraint `EXCLUDE USING gist (c WITH &&)` mean?
来自PostgreSQL文件
排除约束条件确保使用指定的运算符在指定的列或表达式上比较任何两行时,这些运算符比较中的至少一个将返回false或null。 语法为:
CREATE TABLE circles ( c circle, EXCLUDE USING gist (c WITH &&) );
我想知道EXCLUDE USING gist (c WITH &&)
意思是什么? 特别是gist()
, c WITH &&
和EXCLUDE USING
。
可以根据check
进行重写吗? 谢谢。
CHECK
约束基于表的单行评估表达式,而EXCLUDE
约束评估在表中两行的比较。 认为它像一个广义的UNIQUE
约束:而不是“两行都不是平等的”,你能说这样的话“没有两行重叠”,甚至“没有两行可以是不同的 。”
为了在不检查值的所有可能组合的情况下实现此目的,它需要一个合适的索引结构,该结构允许它在插入或更新行时发现可能的违规情况。 这就是声明的gist
部分所指的: 一种特殊类型的索引 ,可以用来加快除相等性之外的其他操作。
声明的其余部分是约束本身: c
是要测试的列, &&
是运算符,对于任何一对行,都不得返回true。 在这种情况下, &&
是“ 几何运算符”手册页上列出的“重叠”运算符 。
EXCLUDE USING gist (c WITH &&)
的约束转化为“ c
两个值都不能相互重叠(更确切地说, Ac && Bc
对于所有不同的行A
和B
都必须返回false或null),请使用要监视此约束的gist
”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.