2013/6/24 Alexsander Rosa <alexsander.r...@gmail.com>

> Estou colocando COMMENTS nas constraints com mensagens de erro mais claras.
> Quero poder converter isto:
> ERROR:  new row for relation "produto" violates check constraint
> "chk_produto_precomin"
> Nisto:
> O preço de tabela do produto não pode estar abaixo do preço mínimo.
>
> Gostaria de uma maneira de descobrir o SQLSTATE e o ID da constraint que
> deu erro.
> Em último caso vou procurar tudo que está entre aspas no catálogo.
>
>
Infelizmente, até o PostgreSQL 9.3 não há um jeito realmente elegante de se
fazer isso. Se você puder esperar um pouco, na versão 9.3 (hoje em beta) é
possível coletar quais foram exatamente os objetos que geraram uma exceção
[1]. Claro que essa funcionalidade também vai depender do driver da sua
linguagem (que você não informou).

Se desconsiderarmos essa funcionalidade, creio que a melhor forma seja
aliar o código da exceção [2] com o a mensagem de erro. Nesse caso, use
sempre mensagens numa determinada língua (preferencialmente inglês, para
evitar problemas) e faça um parser (regex) da mensagem de erro. Pegar só o
que está entre strings me parece uma boa ideia, considerando que não use
nomes fora do comum nos seus objetos não vejo problemas.

[1]
http://www.depesz.com/2013/03/07/waiting-for-9-3-provide-database-object-names-as-separate-fields-in-error-messages/
[2] http://www.postgresql.org/docs/current/static/errcodes-appendix.html

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a