2016-01-24 19:55 GMT-02:00 [email protected] <[email protected]>:
> Estou tendo um erro ao criar uma Constraint.
> O que poderia ser?
[ ... corte ...]
>> ADD CONSTRAINT cc_at_least_one_mapping_needed CHECK ((("qb_id" IS NOT NULL)
>> :: INTEGER + ("xero_id" IS NOT NULL) :: INTEGER + ("freshbooks_id" IS NOT
>> NULL) :: INTEGER + ("unleashed_id_purchase" IS NOT NULL) :: INTEGER +
>> ("myob_id" IS NOT NULL) :: INTEGER + ("ppy_id" IS NOT NULL) :: INTEGER) > 0);
>>
>> ...
>>..
>> ERROR: check constraint "cc_at_least_one_mapping_needed" is violated by
>> some row
Exatamente o que a mensagem diz: que alguma linha está violando esta
restrição acima.
Eu detesto dar spoiler, é contra a minha natureza, mas as vezes a
resposta está tão na nossa frente que não a enxergamos, e acho que a
questão aqui é esta.
Então vai uma dica: antes de adicionar uma restrição use a clausula da
restrição e faça uma busca antes na tabela para descobrir quais linhas
violarão a restrição uma vez que a mesma seja imposta e trate estas
linhas ANTES, então somente depois disto é que você pode adicionar a
restrição, pois, desta forma, você garante que todas as linhas estão
satisfazendo a condição.
Apenas um adendo, você pode usar OR ai acima não? Aconselho trocar os
casts e expressão aritmética por uma boolean como CHECK ((qp_id is not
null) OR (xero_id IS NOT NULL) ... ).
Sem mais spoilers da minha parte... :)
[]s
--
Dickson S. Guedes
mail/xmpp: [email protected] - skype: guediz
http://github.com/guedes - http://guedesoft.net
http://www.postgresql.org.br
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral