You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中基于Art列的检查约束配置问题求助

PostgreSQL检查约束问题解决方案

你的现有约束逻辑存在错误:当前表达式要求仅当Art为'Type 3'且四列满足全空/全非空时才通过验证,但当Art是其他值(比如'Type 2')时,"Art" = 'Type 3'为false,整个CHECK表达式结果为false,直接触发验证失败。

正确的逻辑应该是:仅当Art为'Type 3'时,才要求四列要么全空要么全非空;其他Art值不受此限制。只需将约束中的AND改为OR,并调整前半部分的条件为Art != 'Type 3'即可:

ALTER TABLE "SandBox"."T Test" 
ADD CONSTRAINT  "T Test_Serie_check" CHECK (
    "Art" != 'Type 3' 
    OR (
         ("ID-Serie_fkey" IS NULL      
          AND "Type" IS NULL      
          AND "Nr" IS NULL      
          AND "NrTotal" IS NULL)
        OR
         ("ID-Serie_fkey" IS NOT NULL 
          AND "Type" IS NOT NULL 
          AND "Nr" IS NOT NULL 
          AND "NrTotal" IS NOT NULL)
        )
    );

修改后,当Art为'Type 2'时,"Art" != 'Type 3'为true,整个CHECK表达式结果为true,约束验证通过;只有当Art为'Type 3'时,才会校验四列的空值规则,完全符合你的需求。

内容的提问来源于stack exchange,提问作者StOMicha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:04:56