it-swarm.com.de

Wie werden PostgreSQL-Abfragen protokolliert?

Wie kann ich die Protokollierung aller von PostgreSQL 8.3 ausgeführten SQL-Anweisungen aktivieren?

Bearbeitet (mehr Info) Ich habe diese Zeilen geändert:

log_directory = 'pg_log'                    
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'

Und starten Sie den PostgreSQL-Dienst neu ... aber es wurde kein Protokoll erstellt ... Ich verwende Windows Server 2003.

Irgendwelche Ideen?

347
Paul

In deinem data/postgresql.conf Datei, ändern Sie die log_statement Einstellung auf 'all'.


Bearbeiten

Wenn Sie sich Ihre neuen Informationen ansehen, gibt es möglicherweise noch einige andere Einstellungen, die überprüft werden müssen:

  • stellen Sie sicher, dass Sie das log_destination Variable
  • stellen Sie sicher, dass Sie das logging_collector
  • stellen Sie auch sicher, dass die log_directory -Verzeichnis existiert bereits innerhalb des data -Verzeichnisses und kann vom postgres-Benutzer beschrieben werden.
434
Jarret Hardie

Bearbeiten Sie Ihren /etc/postgresql/9.3/main/postgresql.conf Und ändern Sie die Zeilen wie folgt.

Hinweis: Wenn Sie die Datei postgresql.conf Nicht gefunden haben, geben Sie einfach $locate postgresql.conf In ein Terminal ein

  1. #log_directory = 'pg_log'bislog_directory = 'pg_log'

  2. #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'bislog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

  3. #log_statement = 'none'bislog_statement = 'all'

  4. #logging_collector = offbislogging_collector = on

  5. Optional: SELECT set_config('log_statement', 'all', true);

  6. Sudo /etc/init.d/postgresql restartoderSudo service postgresql restart

  7. Feuerabfrage in postgresql select 2+2

  8. Finde aktuelles Log in /var/lib/pgsql/9.2/data/pg_log/

Die Protokolldateien nehmen mit der Zeit häufig zu und können Ihren Computer beschädigen. Schreiben Sie zu Ihrer Sicherheit ein Bash-Skript, das Protokolle löscht und den postgresql-Server neu startet.

Vielen Dank, Paul, Jarret Hardie, Zoltán, Rix Beck, Latif Premani

92
vijay
SELECT set_config('log_statement', 'all', true);

Mit einem entsprechenden Benutzerrecht darf die obige Abfrage nach dem Verbinden verwendet werden. Dies wirkt sich auf die Protokollierung aus, bis die Sitzung endet.

37
Rix Beck

Sie müssen auch diese Zeilen in PostgreSQL hinzufügen und den Server neu starten:

log_directory = 'pg_log'                    
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
34
Latif Premani
24
Chad Birch

Zu Ihrer Information: Die anderen Lösungen protokollieren nur Anweisungen aus der Standarddatenbank - normalerweise postgres -, um andere zu protokollieren. Beginnen Sie mit ihrer Lösung; dann:

ALTER DATABASE your_database_name
SET log_statement = 'all';

Ref: https://serverfault.com/a/376888 / log_statement

22
A T

+1 zu obigen Antworten. Ich benutze folgende config

log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
20
Shekhar

Nur um weitere Details für CentOS 6.4 (Red Hat 4.4.7-3) zu erhalten, das PostgreSQL 9.2 ausführt, basierend auf den Anweisungen auf dieser Webseite :

  1. Set (Kommentar entfernen) log_statement = 'all' und log_min_error_statement = error im /var/lib/pgsql/9.2/data/postgresql.conf.
  2. Laden Sie die PostgreSQL-Konfiguration neu. Für mich geschah dies durch Ausführen von /usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/.
  3. Finde das heutige Login /var/lib/pgsql/9.2/data/pg_log/
10
Zoltán