PostgreSQL“不区分于”运算符

vatpfxk5  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(127)

让我们假设一个表:

CREATE TABLE foo (
  id serial primary key
  , range int4range NOT NULL
  , barid integer references bar(id)
  , baz whatever... NOT NULL
  , EXCLUDE USING gist (range WITH &&, barid WITH =)
);

排除约束应该不允许同一“barid”值的“range”值重叠。(因此不允许barid = NULL的不同记录的范围重叠)。因此,给定a = NULL和b = NULL,我希望实现“a与b不存在差异”类型的行为,而不是“a = B”(如here所述)。是否存在这样的运算符?目前我只能通过使用

EXCLUDE USING gist (range WITH &&, COALESCE(barid, -1) WITH =)
3vpjnl9f

3vpjnl9f1#

a IS NOT DISTINCT FROM b不会使用索引。永远不会。
所以不,它不存在。
旁白:关系代数中的null表示未定义或未知。它是does not mean no value,就像特殊值中的does not mean no value,实际上不是1,因为不适用。
如果您希望null表示后者,请使其不为null,并为“无值”项分配一个特殊值,例如0或-1。然后将此特殊值也添加到引用表中。
这样,您就可以使用现有的约束。

相关问题