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
相关产品推荐
相关产品推荐

