2

我试图在一个检查约束中获取多个子句,由一个分隔OR

check (stop>start or stop = NULL)

其中 start 和 stop 是时间戳字段。因此,stop可以留空,但如果已指定,则必须晚于start.

我完全错了吗?我没有找到关于时间戳比较的任何内容,或者OR在检查约束中是否允许。

这是在 postgres 8.4.8 中。

4

2 回答 2

8

你应该使用stop IS NULL,而不是stop = NULL

于 2011-12-02T14:31:52.943 回答
7

这是允许的,但是:

  • stop = NULL是没有意义的;你的意思是stop IS NULL
  • 无论如何都不需要指定OR stop IS NULL,因为检查约束只禁止某些内容为“假”,stop > start如果为空,则将是“空”(既不是“真”也不是“假”)stop

有关检查约束的更多信息,请参阅http://www.postgresql.org/docs/8.4/interactive/ddl-constraints.html

应该注意,如果检查表达式的计算结果为真或空值,则满足检查约束。

于 2011-12-02T14:37:26.430 回答