两列上的复合非空约束

LeY*_*ble 1 sql postgresql liquibase

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

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

a_h*_*ame 5

我喜欢用num_nonnulls()这个:

对于至少一个非空列:

check (num_nonnulls(col1, col2) >= 1)
Run Code Online (Sandbox Code Playgroud)

对于恰好一个非空列:

check (num_nonnulls(col1, col2) = 1)
Run Code Online (Sandbox Code Playgroud)

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

<sql> 
  alter table the_table
    add constraint at_least_one_not_null
    check (num_nonnulls(col1, col2) >= 1)   
</sql>
Run Code Online (Sandbox Code Playgroud)