2017-10-04 1 views
3

Ich habe Handler Suche Ausnahme in Postgres sagt esWie globale Ausnahmebehandler in Postgres tun?

DECLARE 
    text_var1 text; 
    text_var2 text; 
    text_var3 text; 
BEGIN 
    -- some processing which might cause an exception 
    ... 
EXCEPTION WHEN OTHERS THEN 
    GET STACKED DIAGNOSTICS text_var1 = MESSAGE_TEXT, 
          text_var2 = PG_EXCEPTION_DETAIL, 
          text_var3 = PG_EXCEPTION_HINT; 
-- call a function which log all this variable perform log_function (text_var1 ,text_var2 , text_var3); 
END; 

hinzufügen Wenn ich für jede Funktion zu tun, dass dies effizient ist?

Jeder Leistungsmangel durch diesen Ansatz?

Können wir nicht einen globalen Ausnahmebehandler für alle Funktionen haben? Bei diesem Ansatz habe ich den Ausnahmebehandler für jede Funktion hinzugefügt.

Speichern Sie sie dann in der Variablen und speichern Sie das Protokoll dafür. Können wir einen globalen Fehlerhandler dafür haben?

bearbeiten

Ich habe alle Ausnahme in Postgres in eine Tabelle kommenden loggt sein. Ich folge diesem Schritt.

1) schreiben STAPELTEN Block in allen Funktion (wenn i 20 Funktion haben, dann schreibe ich diesen Block in allen Funktion)

2) als log dann in der Tabelle.

Was ich will, ist es sollte in Postgres Mechanismus für die globalen Exception-Handler sein, damit ich nicht schreiben STAPELTEN AUSNAHME Block in Postgres für alle Funktion

+1

ja - Sie können Fehler protokollieren protokollieren und verwenden Sie CSV-Protokoll-Format, um es in eine Tabelle zu importieren - ich denke, das ist der Weg, alle Ausnahmen –

Antwort

1

Mit einer EXCEPTION Klausel in einem PL/pgSQL Block GET hat ein negativer Leistungseinfluss; siehe die “ Spitze ” in the documentation of error trapping.

Es gibt keine Möglichkeit, alle Ausnahmen der höchsten Ebene in einer PL/pgSQL-Funktion automatisch zu behandeln.

Meine Empfehlung ist, dass Sie keine Fehler in Datenbankfunktionen protokollieren, sondern von der Anwendung. Zum einen wird das Protokoll gelöscht, wenn Ihre Transaktion zurückgesetzt wird.

+0

zu fangen, die Code ist Beispiel, wie die Ausnahme derzeit behandelt. Für den aktuellen Prozess muss ich diesen Block in alle Funktionen schreiben. Können wir das bei jedem globalen Handler in Postgres tun? –

+0

Ich habe weitere Informationen und Anwendungsfälle im Bearbeitungsbereich hinzugefügt. –

Verwandte Themen