Postgres 9.3
我有两个整数类型的列' a'和' b'。有效选项包括:
我试图添加一个检查/约束来阻止无效选项:
我很感激任何帮助。
提前致谢 丹
答案 0 :(得分:3)
看起来您的情况实际上是一个逻辑含义:如果a is null
那么b is null
。从我们的象征逻辑课程(在我的案例中为PHIL 140),我们知道:
(P -> Q) <-> (-P | Q)
其中->
含义,<->
是逻辑等价。
将其应用于我们的含义并对其进行SQL化会产生:
a is not null or b is null
所以一个简单的check(a is not null or b is null)
约束就足够了。
答案 1 :(得分:2)
create table t (
a int,
b int,
check (
a is null and b is null
or
a is not null and b is null
or
a is not null and b is not null
)
);
insert into t (a, b) values
(null, null),
(1, null),
(1, 1),
(null, 1);
ERROR: new row for relation "t" violates check constraint "t_check"
DETAIL: Failing row contains (null, 1).