Capturar un contexto de pila
Obtener el contexto de la pila, que se parece a un stack trace en otros lenguajes, es una forma potente de depurar funciones complejas y anidadas.
En el código de abajo, queremos capturar el contexto de la pila y registrarlo en los controladores de excepciones de ambos bloques anidados. Luego, queremos revisar su salida en la tabla de errores para ayudarte a depurar qué está causando la excepción en esta función.
Este ejercicio forma parte del curso
Transacciones y manejo de errores en PostgreSQL
Instrucciones del ejercicio
- Declara una variable de texto,
exc_context, para guardar el contexto de la pila. - Almacena
PG_EXCEPTION_CONTEXTen nuestra variableexc_contexten el primer controlador. - Almacena
PG_EXCEPTION_DETAILen nuestra variableexc_detailen el segundo controlador. - Registra tanto el mensaje de error como el contexto de la pila en ambos bloques.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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;