ComenzarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Declara una variable de texto, exc_context, para guardar el contexto de la pila.
  • Almacena PG_EXCEPTION_CONTEXT en nuestra variable exc_context en el primer controlador.
  • Almacena PG_EXCEPTION_DETAIL en nuestra variable exc_detail en 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;
Editar y ejecutar código