我有这样的当前约束:
ALTER TABLE myschema.my_table ADD CONSTRAINT my_constraint EXCLUDE USING gist((<uuidcol>::text) WITH =, numrange(<start>, <end>) WITH &&);
这工作正常,但我需要向约束添加更多内容,它必须只对列为boolean
true 的行强制执行(我们称之为active
)。我试过这个:
ALTER TABLE myschema.my_table ADD CONSTRAINT my_constraint EXCLUDE USING gist((<uuidcol>::text) WITH =, numrange(<start>, <end>) WITH && active = TRUE);
这会引发语法错误:
ERROR: syntax error at or near "active" SQL state: 42601
是否可以让约束也包含该active
列?
您可以添加一个
WHERE
子句使其成为部分EXCLUSION
约束(创建部分索引来实现它):括号不是可选的。手册:
顺便说一句,在Postgres 10或更高版本中,您可以安装附加模块
btree_gist
来添加(除其他外)必要的运算符类,用于uuid
在 GiST 索引中键入。所以你可以简化:比强制转换为
text
. 有关的: