【问题标题】:PostgresQL: Value is only allowed in one of two columnsPostgresQL:值只允许在两列之一中
【发布时间】:2022-09-30 03:49:46
【问题描述】:

我有一个数据库,其中包含两个表 \"Config\" 和 \"Config_xml\",每个表都包含相同的列(id、内容、修饰符等)。唯一的区别是,config 在其内容列中仅包含非 xml 字符串,而 config_xml 在其内容列中包含 xml 字符串。

现在我想将这两个表合并为一个,提供一个内容列和一个 xml_content 列,以简化查询,因为目前我总是要在两个表上进行查询。

现在有一种方法可以限制每一行以允许任一内容中的值或者xml_内容?
提前致谢。

    标签: postgresql


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多