两个列上的Composite Not Null约束



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

我怎么能有这样的约束呢?在液体基础上可行吗?如果没有,是否可以通过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>

您可以使用check约束。对于至少一个非NULL值:

check (col1 is not null or col2 is not null)

如果只需要包含一个值:

check (col1 is not null and col2 is null or
col1 is null and col2 is not null
)

或者在Postgres中:

check ( (col1 is not null)::int + (col2 is not null)::int = 1 )

相关内容

  • 没有找到相关文章

最新更新