> 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

Responder a