排除约束`排除要点(c WITH &&)`是什么意思?

时间:2018-07-09 13:43:40

标签: postgresql exclusion-constraint

来自PostgreSQL文档

  

排除约束条件可确保是否在   使用指定的运算符在指定的列或表达式处   这些运算符比较中至少有一个将返回false或null。的   语法是:

CREATE TABLE circles (
    c circle,
    EXCLUDE USING gist (c WITH &&)
);

我想知道EXCLUDE USING gist (c WITH &&)是什么意思?特别是gist()c WITH &&EXCLUDE USING

可以根据check进行重写吗?谢谢。

1 个答案:

答案 0 :(得分:14)

尽管CHECK约束基于表的单行评估表达式,而EXCLUDE约束则评估表中两行的比较。可以将其视为广义的UNIQUE约束:您可以说“没有两行可以重叠”,甚至是“没有两行可以不同”。

为了在不检查所有可能的值组合的情况下实现此目的,它需要一个适当的索引结构,该结构允许它在插入或更新行时查找可能的违规情况。这就是声明的gist部分所指的内容:a particular type of index可用于加速除相等以外的其他操作。

声明的其余部分是约束本身:c是要测试的列,而&&是运算符,对于任何一对行,都不得返回true。在这种情况下,&&是“重叠”运算符as listed on the geometric operators manual page

因此,将约束EXCLUDE USING gist (c WITH &&)转换为“ c的任何两个值都不得彼此重叠(更确切地说,A.c && B.c对于所有不同的行{{ 1}}和A),请使用B索引来监视此约束”。