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
Instruções do exercício
- Declare uma variável de texto,
exc_context, para armazenar o contexto da pilha. - Armazene o
PG_EXCEPTION_CONTEXTna variávelexc_contextno primeiro handler. - Armazene o
PG_EXCEPTION_DETAILna variávelexc_detailno 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;