PostgreSQL:仅允许在两列中的一列中使用值

xtupzzrd  于 2022-09-21  发布在  PostgreSQL
关注(0)|答案(1)|浏览(179)

我有一个数据库,其中有两个表“Config”和“Config_XML”,每个表都由相同的列(id、Content、Modify等)组成。唯一的区别是,该配置在其内容列中只包含非XML字符串,而CONFIG_XML在其内容列中包含一个XML字符串。

现在,我想将这两个表合并为一个表,提供一个Content列和一个XML_Content列,以简化查询,因为目前我总是必须同时对这两个表进行查询。

现在,有没有一种方法可以约束每一行以允许在CONTENTXMLCONTENT中有一个值?
先谢谢你。

k5ifujac

k5ifujac1#

您可以使用要求一列为空的CHECK约束。

alter table the_table
   add constraint check_content
   check (num_nulls(config, config_xml) = 1);

为了避免使用空字符串,您可能需要使用:

check (num_nulls(nullif(trim(config), ''), nullif(trim(config_xml), '')) = 1)

相关问题