PostgreSQL";与“不”不同;操作人员
让我们假设一张桌子:PostgreSQL";与“不”不同;操作人员,postgresql,null,comparison-operators,gist-index,Postgresql,Null,Comparison Operators,Gist Index,让我们假设一张桌子: 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”值重叠。但我希望它像对
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”值重叠。但我希望它像对待其他值一样对待“NULL”(因此,对于barid=NULL的不同记录,不允许重叠范围)。因此,给定a=NULL和b=NULL,我希望实现“a与b没有区别”类型的行为,而不是“a=b”类型的行为(如上所述)。是否存在这样的运营商?目前,我只能通过使用
EXCLUDE USING gist (range WITH &&, COALESCE(barid, -1) WITH =)
a与b没有区别
不会使用索引。永远
所以不,它不存在
旁白:空在关系代数中表示未定义或未知。它,作为特殊的价值,实际上不是一个,因为不适用
如果希望null表示后者,请将其设为非null,并为“无值”项指定一个特殊值,例如0或-1。并将此特殊值添加到引用表中
这样,您就可以使用现有的约束