我试图在一个检查约束中获取多个子句,由一个分隔OR
:
check (stop>start or stop = NULL)
其中 start 和 stop 是时间戳字段。因此,stop
可以留空,但如果已指定,则必须晚于start
.
我完全错了吗?我没有找到关于时间戳比较的任何内容,或者OR
在检查约束中是否允许。
这是在 postgres 8.4.8 中。
我试图在一个检查约束中获取多个子句,由一个分隔OR
:
check (stop>start or stop = NULL)
其中 start 和 stop 是时间戳字段。因此,stop
可以留空,但如果已指定,则必须晚于start
.
我完全错了吗?我没有找到关于时间戳比较的任何内容,或者OR
在检查约束中是否允许。
这是在 postgres 8.4.8 中。
你应该使用stop IS NULL
,而不是stop = NULL
。
这是允许的,但是:
stop = NULL
是没有意义的;你的意思是stop IS NULL
。OR stop IS NULL
,因为检查约束只禁止某些内容为“假”,stop > start
如果为空,则将是“空”(既不是“真”也不是“假”)stop
。有关检查约束的更多信息,请参阅http://www.postgresql.org/docs/8.4/interactive/ddl-constraints.html。
应该注意,如果检查表达式的计算结果为真或空值,则满足检查约束。