请看看下面的表中:Postgres的:约束检查和空值
name | x | y
---------+-----+------
foo | 3 | 5
bar | 45 | 99
foobar | 88 |
barfoo | 0 | 45
我想补充一个约束CHECK(Y> X),但是这显然会失败,由于它是由违反排'foobar'。
如何创建一个约束:check(y> x),但仅当y不为null?
请看看下面的表中:Postgres的:约束检查和空值
name | x | y
---------+-----+------
foo | 3 | 5
bar | 45 | 99
foobar | 88 |
barfoo | 0 | 45
我想补充一个约束CHECK(Y> X),但是这显然会失败,由于它是由违反排'foobar'。
如何创建一个约束:check(y> x),但仅当y不为null?
其实,你真的不需要做别的。如果检查表达式的计算结果为true或空值,则检查约束得到满足。
你的约束CHECK(Y> X)将作为工作在你的方案,因为该行foobar的不违反约束,因为它的计算结果为空
你可以把一个IS NULL测试到CHECK表达式,像这样:
CREATE TABLE mytable (
name TEXT,
x INTEGER,
y INTEGER CHECK (y IS NULL OR y > x)
);
(PostgreSQL的8.4测试)
这完全是没有必要的。 PostgreSQL手册引用:*应该注意的是,如果检查表达式的计算结果为true或空值,则检查约束条件得到满足。因为如果任何操作数为空,大多数表达式将计算为空值,它们将不会阻止受约束列中的空值。*(http://www.postgresql.org/docs/8.1/static/ddl-constraints.html) – 2012-02-24 20:06:50