sql - 两列上的复合非空约束

我想要一个约束,在该约束中我确保至少有两列不为空。 基本上,从这两列中,一列必须包含值。

我怎么能有这样的约束呢? 在 liquibase 上有可能吗?如果没有,是否可以通过 SQL 或一些 postgres 特定的东西?

最佳答案

我喜欢用 num_nonnulls()为此:

对于至少一个非空列:

check (num_nonnulls(col1, col2) >= 1)

对于恰好一个非空列:

check (num_nonnulls(col1, col2) = 1)

Liquibase 没有针对检查约束的内置更改(至少在社区版本中没有),因此您需要 <sql>为此改变:

<sql> 
  alter table the_table
    add constraint at_least_one_not_null
    check (num_nonnulls(col1, col2) >= 1)   
</sql>

https://stackoverflow.com/questions/66370232/

相关文章:

scala - 为什么 scala Try-match 将 Throwable 匹配为成功

r - 选择 R 中的数字字符列

windows - windows 上 docker 的 vm.max_map_count 问题

javascript - 是否可以从 Javascript 动画创建视频?

sed - 在sed中获取过滤部分的第一个字母

javascript - 如何在 Javascript 的 foreach 循环中合并多个数组

optimization - F# 和 ILNumerics

javascript - 检查对象中的任何数组是否包含空值

python - 打开 .ipynb 文件时如何修复 "Distutils was imported

r - 按组选择每个连续运行中的第一行