LoslegenKostenlos loslegen

Einen Kontext-Stack erfassen

Den Stack-Kontext zu erhalten – ähnlich wie ein Stack-Trace in anderen Sprachen – ist eine mächtige Methode, um komplexe und verschachtelte Funktionen zu debuggen.

Im folgenden Code wollen wir den Stack-Kontext erfassen und in den Exception-Handlern beider verschachtelter Blöcke protokollieren. Anschließend prüfen wir die Ausgabe in der Tabelle für Fehler, um herauszufinden, was die Exception in dieser Funktion verursacht.

Diese Übung ist Teil des Kurses

Transaktionen und Fehlerbehandlung in PostgreSQL

Kurs anzeigen

Anleitung zur Übung

  • Deklariere eine Textvariable exc_context, die den Stack-Kontext hält.
  • Speichere PG_EXCEPTION_CONTEXT im ersten Handler in unserer Variable exc_context.
  • Speichere PG_EXCEPTION_DETAIL im zweiten Handler in unserer Variable exc_detail.
  • Protokolliere sowohl die Fehlermeldung als auch den Stack-Kontext in beiden Blöcken.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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 bearbeiten und ausführen