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
Oefeninstructies
- Declareer een tekstvariabele
exc_contextom de stackcontext op te slaan. - Sla de
PG_EXCEPTION_CONTEXTop in onze variabeleexc_contextin de eerste handler. - Sla de
PG_EXCEPTION_DETAILop in onze variabeleexc_detailin 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;