Ich verwende PostgreSQL (8.3) mit mehreren Datenbanken ... Ich frage mich, ob es eine Möglichkeit gibt, die Abfragen zu protokollieren, die nur in einer der Datenbanken (nicht in allen) durchgeführt wurden.
Oder um eine Protokolldatei pro Datenbank zu haben ...
Ich weiß, dass ich log_line_prefix = "%d"
den Namen der Datenbank protokollieren und dann filtern kann, aber das ist nicht das Problem.
Sollte ich vielleicht einen log_analyzer verwenden, um dies zu umgehen? Hast du irgendwelche Empfehlungen?
Vielen Dank
postgresql
Eine Stange
quelle
quelle
Antworten:
Ja, dies ist möglich. Sie können den Konfigurationsparameter
log_statement
pro Datenbank festlegen :quelle
Wenn Sie Anweisungen über Postgres protokollieren, gibt es keine mir bekannte Möglichkeit, diese Datenbank zu erstellen (es sei denn, Sie schreiben eine Ansicht, die einen Protokollierungsauslöser für jede Tabelle aufruft - offensichtlich nicht realistisch).
Die beste verfügbare Lösung ist die von Ihnen beschriebene (stellen Sie jeder Zeile den Datenbanknamen voran) und geben Sie die Daten an eine Stelle weiter
syslog-ng
, um das Abfrageprotokoll pro Datenbank aufzuteilen.Die Nachbearbeitung der Protokolldatei ist ebenfalls eine Option. Beachten Sie jedoch mögliche Probleme (maximale Dateigrößenbeschränkungen für Betriebssystem / Dateisystem, Erschöpfung des Speicherplatzes) für Datenbankcluster mit einer großen Anzahl von Abfragen.
Beachten Sie auch, dass Sie für die Protokollierung aller Abfragen eine Leistungsstrafe zahlen. Wie hoch eine Strafe ist, hängt davon ab, wie groß die Anfragen sind ...
quelle