【发布时间】:2013-03-02 20:05:26
【问题描述】:
向 PostgreSQL 添加约束以检查(来自一组列)的一列是否包含非空值的好方法是什么?
更新:我很可能想要使用check 表达式,如Create Table 和Alter Table 中所述。
更新:我正在查看可用的functions。
更新:仅作为背景,这是我当前使用的 Rails 验证逻辑:
validate :multi_column_validation
def multi_column_validation
n = 0
n += 1 if column_1
n += 1 if column_2
n += 1 if column_3
unless 1 == n
errors.add(:base, "Exactly one column from " +
"column_1, column_2, column_3 must be present")
end
end
明确地说,我在这里寻找的是 PSQL,而不是 Ruby。我只是想展示我正在使用的逻辑,因为它比枚举所有“真值表”的可能性更紧凑。
【问题讨论】:
-
这些列是布尔值吗?
-
Clodoaldo:我对 NULL 或 NOT NULL 感兴趣。 (在我的具体情况下,我混合了 UUID 和 TEXT 列,但我认为这不是问题的关键。)