postgreSQL检查约束和null

时间:2015-04-07 17:56:36

标签: postgresql

我创建了一个表“TEST”,我试图输入一些数据,但是我收到了一个错误。错误是错误:关系“test”的新行违反了检查约束“test_status_check”DETAIL:失败的行包含(5,2015-07-21,15:00:00,I7,9,NULL,NULL)。 我认为这是因为状态无效。因此,我尝试在测试表中放置null但仍然无法正常工作

Create table test(
    clientID CHAR (20),
    startDate date,
    startTime time,
    instructorNO CHAR(20),
    centreID  CHAR(20), 
    status CHAR(4) CHECK (status IN ('Fail','Pass')) NULL,
    reason VARCHAR(400),

    omitted...
    )

错误:关系“test”的新行违反了检查约束“test_status_check”DETAIL:失败的行包含(5,2015-07-21,15:00:00,I7,9,NULL,NULL)。

1 个答案:

答案 0 :(得分:1)

编辑:我彻底改变了主意。您现有的代码有效(并且NULL部分是不必要的)。

根据the documentation

  

应该注意,如果检查表达式的计算结果为true或空值,则满足检查约束。由于如果任何操作数为null,大多数表达式将计算为空值,因此它们不会阻止受约束列中的空值。要确保列不包含空值,可以使用下一节中描述的非空约束。

所以,别的东西搞砸了。有关原始代码工作的示例,请参阅here