我制定了约束,将列completed
标记为true
,其他一些列必须具有值。
但由于某些原因,当completed
标记为true
时,当我将指定的列留空时,约束不会抱怨。我还特意插入NULL指定的列,但仍然没有约束。
有什么想法吗?
CREATE TABLE info (
id bigserial PRIMARY KEY,
created_at timestamptz default current_timestamp,
posted_by text REFERENCES users ON UPDATE CASCADE ON DELETE CASCADE,
title character varying(31),
lat numeric,
lng numeric,
contact_email text,
cost money,
description text,
active boolean DEFAULT false,
activated_date date,
deactivated_date date,
completed boolean DEFAULT false,
images jsonb,
CONSTRAINT columns_null_check CHECK (
(completed = true
AND posted_by != NULL
AND title != NULL
AND lat != NULL
AND lng != NULL
AND contact_email != NULL
AND cost != NULL
AND description != NULL
AND images != NULL) OR completed = false)
);
答案 0 :(得分:2)
在Chapter 9. Functions and Operators中:
要检查值是否为null,请使用谓词:
expression IS NULL expression IS NOT NULL
或等效但非标准的谓词:
expression ISNULL expression NOTNULL
因此,您无法使用value != NULL
检查空值,只能使用value IS NULL
和value IS NOT NULL
。
对于布尔值,它们是相同的:
也可以使用谓词
测试布尔值boolean_expression IS TRUE boolean_expression IS NOT TRUE boolean_expression IS FALSE boolean_expression IS NOT FALSE boolean_expression IS UNKNOWN boolean_expression IS NOT UNKNOWN