> Pessoal eu tenho a seguinte constraint que segue em baixo. É possível > que, em caso de erro, saibamos qual o campo que dá erro, ou mais > informações acerca do mesmo? > > Porque só dá o nome da constraint em questão e muitas vezes perde-se > muito tempo para descobrirmos o erro... > > Obrigado > > > > ALTER TABLE elementos ADD CONSTRAINT elementos_mal_inseridos CHECK ( > (cod='29e' and localizacao = 0 and desenho = 0) or > (cod='1e' and localizacao = 0 and desenho = 0) or > (cod='8' and localizacao = 1 and desenho = 1) or > (cod='40' and localizacao = 1 and desenho = 1 and m2 is not null and m2 > <> 0 and ml is null) or > (cod='42' and localizacao = 1 and desenho = 1) or > (cod='43' and localizacao = 1 and desenho = 1 and ml is not null and ml > <> 0 and m2 is null) or > (cod='49' and localizacao = 1 and desenho = 1 and m2 is not null and m2 > <> 0 and ml is null) or > (cod='50' and localizacao = 1 and desenho = 1) or > (cod='52' and localizacao = 1 and desenho = 1) or > (cod='7' and localizacao IN (1,2) and desenho IN (1,2) and m2 is not > null and m2 <> 0 and ml is null) or > (cod='29' and localizacao IN (1,2) and desenho IN (1,2) and ml is not > null and ml <> 0 and m2 is null) or > (cod='30' and localizacao IN (1,2) and desenho IN (1,2) and ml is not > null and ml <> 0 and m2 is null) or > (cod='1a' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='1b' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='1c' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='1d' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='1f' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='2a' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='2b' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='2c' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='3' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='4' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='5' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='9' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='10' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='11' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='12' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='13' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='14' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='15' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='16' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='17' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='18' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='19' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='20' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='21' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='22' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='23' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='24' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='25' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='26' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='27' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='28' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='31' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='32' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='33' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='34' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='35' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='36' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='37' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='39' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='41' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='44' and localizacao IN (1,2) and desenho = 1) > or (cod='45' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='46' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='47' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='48' and localizacao IN (1,2) and desenho IN (1,2)) > or (cod='51' and localizacao IN (1,2) and desenho IN (1,2)))
É uma restrição bem complicadinha, né? Como ela é composta de vários "or", então você pode criar uma restrição para cada linha da sua original, com nomes diferentes. Pode ser um facilitador, mas não sei o desempenho desta idéia. Talvez, se você precisa de realmente uma excelente descrição de "qual foi o erro", fazer um gatilho (trigger) do tipo BEFORE INSERT OR UPDATE pode ser uma idéia mais interessante. []s Flavio Gurgel _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
