Aan de slagGa gratis aan de slag

Een contextstack vastleggen

De stackcontext, vergelijkbaar met een stacktrace in andere talen, is een krachtig hulpmiddel om complexe en geneste functies te debuggen.

In de onderstaande code willen we de stackcontext vastleggen en opslaan in de exception-handlers van beide geneste blokken. Daarna bekijken we de output in de tabel met errors om te achterhalen wat in deze functie de exception veroorzaakt.

Deze oefening maakt deel uit van de cursus

Transacties en foutafhandeling in PostgreSQL

Cursus bekijken

Oefeninstructies

  • Declareer een tekstvariabele exc_context om de stackcontext op te slaan.
  • Sla de PG_EXCEPTION_CONTEXT op in onze variabele exc_context in de eerste handler.
  • Sla de PG_EXCEPTION_DETAIL op in onze variabele exc_detail in de tweede handler.
  • Leg in beide blokken zowel het foutbericht als de stackcontext vast.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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;
Code bewerken en uitvoeren