ComeçarComece de graça

Capturando um stack de contexto

Obter o contexto da pilha, que é como um stack trace em outras linguagens, é uma forma poderosa de depurar funções complexas e aninhadas.

No código abaixo, queremos capturar o contexto da pilha e registrá-lo nos handlers de exceção de ambos os blocos aninhados. Em seguida, vamos revisar a saída na tabela de erros para ajudar a depurar o que está causando a exceção nesta função.

Este exercício faz parte do curso

Transações e Tratamento de Erros no PostgreSQL

Ver curso

Instruções do exercício

  • Declare uma variável de texto, exc_context, para armazenar o contexto da pilha.
  • Armazene o PG_EXCEPTION_CONTEXT na variável exc_context no primeiro handler.
  • Armazene o PG_EXCEPTION_DETAIL na variável exc_detail no segundo handler.
  • Registre tanto a mensagem de erro quanto o contexto da pilha em ambos os blocos.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

DO $$
DECLARE
   exc_message text;
   exc_details text;
   -- Declare a variable, exc_context to hold the exception context
   ___ ___;
BEGIN
    BEGIN
    	INSERT INTO patients (a1c, glucose, fasting) values (5.6, 93, TRUE),
        	(6.3, 111, TRUE),(4.7, 65, TRUE);
    EXCEPTION
        WHEN others THEN
        -- Store the exception context in exc_context
        GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
                                ___ = ___;
        -- Record both the msg and the context
        INSERT INTO errors (msg, context) 
           VALUES (___, ___);
    END;
	BEGIN
    	UPDATE patients set fasting = 'true' where id=1;
    EXCEPTION
        WHEN others THEN
        -- Store the exception detail in exc_details
        GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
                                ___ = ___;
        INSERT INTO errors (___, ___) 
           VALUES (exc_message, exc_context);
    END;
END$$;
SELECT * FROM errors;
Editar e executar o código