Postgres:一个布尔值是否为真,其他是否为假检查约束?

时间:2020-05-16 15:55:42

标签: sql postgresql

我正在使用Postgres,并且我有一个表,其中包含一些布尔类型的列。 c1,c2,c3,c4是(BOOLEAN)列。

在我的模型中,我必须拥有其中之一,并且只有一组设为true。其他三个必须为假。

我在表的其他列上添加了类似的检查(针对null,不是bool),例如:

a = email[0:email.index('@')]

我还没有找到一种解决方法,但是可以使用布尔类型。

是否可以将一个布尔值强制设置为true,而将另一个布尔值设置为false?

1 个答案:

答案 0 :(得分:5)

您可以转换为数字并计数:

check (( n1::int) + (n2::int) + (n3::int) + (n4::int) = 1)

注意:这假定值不是NULL。如果允许NULL,则可以使用类似的逻辑。大概会将它们视为错误。