Ja que voce tem os campos "cod", "localizacao" e desenho praticamente
definidos, porque nao tenta usar relacionamentos
para estes campos e na constraint voce verifica este relacionameto ?
tipo:

ALTER TABLE elementos ADD CONSTRAINT elementos_mal_inseridos CHECK (
   (( select xxx ..... xxx ) is NOT NULL ) AND/OR ETC...ETC )

tenta simplicar isto ...

na pior das hipoteses use um trigger [1] e [2]

[1] http://imasters.com.br/artigo/10644/postgresql/triggers_no_postgresql/
[2] http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html

2012/1/30 Pedro Costa <pedrocostaa...@sapo.pt>

> 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)))
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Moisés P. Sena
(Analista e desenvolvedor de sistemas WEB e mobile)
http://www.moisespsena.com
http://linux.moisespsena.com
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a