2 Stimmen

Reduzieren Sie störende Hinweise in plpgsql

Ich habe eine Funktion, die eine temporäre Tabelle verwendet, die gelöscht werden muss, wenn sie vorhanden ist.

drop table if exists t_xy;
create temp table t_xy on commit drop as select ...;

Anschließend verwende ich diese Funktion in einem View. Die Funktion wird viele Male aufgerufen, während die Abfrage läuft. Ich möchte den Befehl "raise notice" verwenden, da dies fast der einzige zuverlässige Weg ist, um Variablen in Funktionen für Debug-Zwecke zu melden. Das Problem ist, dass ich sie in einer großen Menge an unerwünschten Zeilen suchen muss, wie:

NOTICE:  table "t\_xy" existiert nicht, überspringen
CONTEXT:  SQL-Befehl "drop table if exists t\_xy"
PL/pgSQL-Funktion f\_pending\_operations(uuid) Zeile 5 im SQL-Befehl

Gibt es eine Möglichkeit, solche Hinweise zu unterdrücken, die nicht vom raise notice-Befehl, sondern von drop table if exists oder dem Löschen anderer Objekte generiert wurden? Das Setzen der Option 'client_min_messages' auf 'debug' verschlimmert das Problem.

4voto

Erwin Brandstetter Punkte 530399

Sie können Hinweise an den Client von jeder Anweisung mit einer lokalen Einstellung für client_min_messages unterdrücken:

SET LOCAL client_min_messages = warning;  -- "debug" hätte den gegenteiligen Effekt
DROP TABLE if exists t_xy;
-- RESET client_min_messages;

Wenn Sie kein RESET ausführen, unterdrücken Sie effektiv Hinweise für den Rest der Transaktion. Das Handbuch:

Die Auswirkungen von SET LOCAL dauern nur bis zum Ende der aktuellen Transaktion an

Alternativ können Sie client_min_messages beim Aufruf von der Befehlszeile aus setzen (für die Dauer der Sitzung):

1voto

Fazal Majid Punkte 708

Sie können auch die Länge der Nachrichten mithilfe des GUC-Parameters reduzieren:

set log_error_verbosity='terse';

welcher natürlich auch auf Funktionsebene eingestellt werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X