请看下表:
name | x | y
---------+-----+------
foo | 3 | 5
bar | 45 | 99
foobar | 88 |
barfoo | 0 | 45
我想添加一个约束CHECK(y> x),但是这显然会失败,因为行'foobar'违反了它。
如何创建一个约束:check(y> x),但仅当y不为null?
答案 0 :(得分:19)
事实上,你真的不需要做任何其他事情。如果检查表达式的计算结果为true或空值,则满足检查约束。
你的约束CHECK(y> x)将在你的场景中工作,因为行foobar不会违反约束,因为它的计算结果为null
答案 1 :(得分:1)
您可以将IS NULL测试放入CHECK表达式,如下所示:
CREATE TABLE mytable (
name TEXT,
x INTEGER,
y INTEGER CHECK (y IS NULL OR y > x)
);
(在PostgreSQL 8.4上测试)