16 postgresql exclusion-constraint
来自PostgreSQL文档
排除约束确保如果使用指定的运算符在指定的列或表达式上比较任何两行,则这些运算符比较中的至少一个将返回false或null.语法是:
Run Code Online (Sandbox Code Playgroud)CREATE TABLE circles ( c circle, EXCLUDE USING gist (c WITH &&) );
我想知道是什么EXCLUDE USING gist (c WITH &&)意思?特别是gist(),c WITH &&和EXCLUDE USING.
它可以改写check吗?谢谢.
IMS*_*SoP 21
虽然CHECK约束根据表的单个行计算表达式,但EXCLUDE约束会计算表中两行的比较.可以把它想象成一个广义UNIQUE约束:而不是"没有两行可以相等",你可以说"没有两行重叠",甚至"没有两行可以不同 ".
为了在不检查每个可能的值组合的情况下实现此目的,它需要一个适当的索引结构,以便在插入或更新行时查找可能的违规.这就是gist声明中引用的部分:特定类型的索引,可用于加速除了相等之外的操作.
声明的其余部分是约束本身:c是要测试的列,并且&&是对于任何行对都不能返回true的运算符.在这种情况下,几何操作员手册页上列出的&&是"重叠"操作符.
等摆放在一起,将约束EXCLUDE USING gist (c WITH &&)转化为"没有两个值c必须相互重叠(更准确地说,A.c && B.c必须返回所有不同的行假或零A和B),并请用gist指数来监视这个约束".
| 归档时间: |
|
| 查看次数: |
4811 次 |
| 最近记录: |