37.9. Erros e mensagens

A instrução RAISE é utilizada para gerar mensagens informativas e causar erros.

RAISE nível 'formato' [, variável [, ...]];

Os níveis possíveis são DEBUG, LOG, INFO, NOTICE, WARNING, e EXCEPTION. O nível EXCEPTION causa um erro (que normalmente interrompe a transação corrente); os outros níveis apenas geram mensagens com diferentes níveis de prioridade. Se as mensagens de uma determinada prioridade são informadas ao cliente, escritas no log do servidor, ou as duas coisas, é controlado pelas variáveis de configuração log_min_messages e client_min_messages. Para obter mais informações deve ser vista a Seção 16.4 .

Dentro da cadeia de caracteres de formatação, o caractere % é substituído pela representação na forma de cadeia de caracteres do próximo argumento opcional. Deve ser escrito %% para produzir um % literal. Deve ser observado que atualmente os argumentos opcionais devem ser variáveis simples, e não expressões, e o formato deve ser um literal cadeia de caracteres simples.

Neste exemplo o valor de v_job_id substitui o caractere % na cadeia de caracteres:

RAISE NOTICE ''Chamando cs_create_job(%)'', v_job_id;

Este exemplo interrompe a transação com a mensagem de erro fornecida:

RAISE EXCEPTION ''ID inexistente --> %'', id_usuario;

O PostgreSQL não possui um modelo de tratamento de exceções muito aperfeiçoado. Quando o analisador, planejador/otimizador ou executor decide que a declaração não pode mais ser processada, toda a transação é interrompida e o sistema volta para o laço principal para esperar pelo próximo comando da aplicação cliente.

É possível se aprofundar no mecanismo de erro para ver o que acontece. Porém, atualmente não é possível informar o que realmente causou a interrupção (erro do formato do tipo de dado, erro de ponto flutuante, erro de análise, etc.). Também é possível que o servidor de banco de dados esteja em um estado inconsistente neste ponto, portanto retornar para o executor superior ou emitir mais comandos pode corromper todo o banco de dados.

Portanto, a única coisa que a linguagem PL/pgSQL faz atualmente, quando encontra uma interrupção durante a execução de um procedimento de função ou de gatilho, é adicionar alguns campos à mensagem informando em que função e onde (o número da linha e tipo da instrução) onde o erro ocorreu. O erro sempre termina a execução da função.

SourceForge.net Logo