Aguarde, carregando...

Debugando Função no PostgreSQL

Debugando Função no PostgreSQL
Reginaldo José da silva
Por: Reginaldo José da silva
Dia 08/05/2018 09h00

Veja como dois comandos básicos você consegue fazer uma leitura de parâmetros ou então parar a execução da sua função

Salve salve galera, Gustavo Web aqui e hoje a gente vai estudar uma possibilidade de fazer o debug de uma função no banco de dados utilizando o PostgreSQL como SGDB padrão!

Como você deve ter visto na aula anterior que criamos um função no nosso banco, você não tem muita alternativa para saber se o comportamento da sua função está correto ou não... No geral, se ela funcionar vai te mostrar o resultado ou vai dar um erro de SQL!

Mas e para saber se no meio do caminho os processos estão ocorrendo normalmente? Se a porcentagem que você está calculando está correta ou não? Se determinado SELECT que você executa e deveria retornar apenas uma linha está na verdade retornando vários...

Para printar esse tipo de parâmetro, você pode usar o RAISE NOTICE! Opte por informar uma mensagem e concatenar parâmetros dentro dela ou simplesmente pontos estratégicos para saber onde está o ponteiro de execução.

Exemplo Prático

Pensa comigo assim:

Sua função faz um tratamento numa base de endereços, segmenta as informações por estado e cidade, depois vincula cada município com o devido endereço, depois faz um tratamento de singularidade (algoritmo de similaridade do postgres é top! me cobrem sobre isso...) e por fim limpa as tabelas temporárias que foram utilizadas durante o percurso!

Se essa base de endereços, tiver mais de 1 milhão de registros essa função pode ficar sendo executada por vários minutos, talvez horas...

E para saber qual é a etapa que ela está fazendo nesse exato momento? Quantos registros há no total? Qual está sendo processado agora?

Para desmistificar tudo isso, você pode colocar simplesmente o seguinte:

RAISE NOTICE 'Limpeza de Tabelas Temporárias :)';
RAISE NOTICE 'Fique tranquilo! O Processo já está acabando.';

E pronto! Você vai saber exatamente que está sendo feito a limpeza das tabelas temporárias :)

Parando a execução do código

Essa ação é útil quando você faz determinado tratamento, e caso você não tenha nenhuma resposta para aquele "ELSE", você para o processo e informa o usuário que algo inesperado aconteceu. De fato, gera uma excessão!

Assim o banco sabe que não pode continuar dali em diante, e sua aplicação terá que ser capaz de lidar com esse tipo de ação.

Você poderia criar uma excessão como:

RAISE EXCEPTION 'Ooops, ocorreu uma excessão na validação das informações! Entre em contato com o administrador do sistema';

O comportamento do banco de dados será basicamente se você tivesse tentando efetuar uma divisão por zero. Eeeee é claro que isso é impossível de se fazer, lógico!

Agora me conta aqui nos comentários, o que você achou dessa aula! Já conhecia essas sintaxes? O processo para fazer isso no PostgreSQL é bem mais tranquilo que no MySQL/MariaDB né :/

Para fazer essa mesma ação no MariaDB por exemplo, você pode querer estudar DECLARE HANDLER.

Se tiver dúvidas ou sugestões para as próximas aulas dessa nossa playlist, só me dizer aqui na parte de comentários... Vou responder cada um deles :)

Veja também:

Confira mais artigos relacionados e obtenha ainda mais dicas de controle para suas contas.