Wie aktiviere ich die Protokollierung aller von PostgreSQL 8.3 ausgeführten SQL?
Bearbeitet (weitere Informationen) 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?
postgresql
logging
Paul
quelle
quelle
logging_collector = on
systemctl restart postgresql
Ihnen konfigurierte PostgreSQL-Dienst möglicherweise nicht neu gestartet wird (ich verstehe noch nicht, warum), sodass Änderungen in der Konfigurationsdatei nicht übernommen werden. Es ist sicherer zu verwendenpg_ctl
(oderpg_ctlcluster
auf Debian).systemctl reload postgresql
,systemctl restart postgresql
,service postgresql reload
undservice postgresql restart
alle machen Konfigurationsänderungen wirksam.Antworten:
data/postgresql.conf
Ändern Sie in Ihrer Datei dielog_statement
Einstellung in'all'
.Bearbeiten
Wenn Sie sich Ihre neuen Informationen ansehen, würde ich sagen, dass möglicherweise einige andere Einstellungen überprüft werden müssen:
log_destination
Variable aktiviert habenlogging_collector
log_directory
Verzeichnis bereits imdata
Verzeichnis vorhanden ist und dass der Benutzer von postgres darauf schreiben kann.quelle
pg_ctl reload
ALTER SYSTEM
Befehl kann ein Superuser GUC-Parameter aus SQL festlegen.data
in der Antwort angegebene Verzeichnis ist nicht der wörtliche Name. Es bezieht sich auf den Pfad, der derdata_directory
Variablen in der PostgreSQL-Konfigurationsdatei zugewiesen ist . Unter Debian und Ubuntu GNU / Linux, diese Datei befindet sich in der Regel an/etc/postgresql/$v/main/postgresql.conf
, wo$v
der Server - Version. Außerdem wird auf den oben genannten Systemen, wennlog_destination = 'stderr'
die Ausgabe geschrieben wird/var/log/postgresql/postgresql-$v-main.log
, wo$v
sich die Serverversion befindet (nicht an einem Ort innerhalbdata_directory
).Bearbeiten Sie Ihre
/etc/postgresql/9.3/main/postgresql.conf
und ändern Sie die Zeilen wie folgt.Hinweis : Wenn Sie die
postgresql.conf
Datei nicht gefunden haben , geben Sie einfach$locate postgresql.conf
ein Terminal ein#log_directory = 'pg_log'
zulog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
zulog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
zulog_statement = 'all'
#logging_collector = off
zulogging_collector = on
Optional :
SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart
odersudo service postgresql restart
Feuerabfrage in postgresql
select 2+2
Aktuelle Anmeldung suchen
/var/lib/pgsql/9.2/data/pg_log/
Die Protokolldateien wachsen im Laufe der Zeit stark und können Ihren Computer töten. Schreiben Sie zu Ihrer Sicherheit ein Bash-Skript, mit dem Protokolle gelöscht und der Postgresql-Server neu gestartet werden.
Danke @paul, @Jarret Hardie, @ Zoltán, @Rix Beck, @Latif Premani
quelle
# log_destination = 'stderr'
in der Konfigurationsdatei auskommentieren, bevor dies funktionierte.log_filename = 'postgresql-%d.log'
Nein, es wird nicht nach jedem Neustart überschrieben, es wird für jeden Tag angehängt und jeden Monat überschrieben. Natürlich gibt es je nach Monat 28,29,30,31 unterschiedliche Tage - aber Sie haben die Idee.Mit einem entsprechenden Benutzerrecht kann die obige Abfrage nach dem Verbinden verwendet werden. Dies wirkt sich auf die Protokollierung aus, bis die Sitzung endet.
quelle
SET log_statement = 'all'
oder (für die Transaktionsebene)SET LOCAL log_statement = 'all'
. Sie könnten auch an den Einstellungenclient_min_messages
und interessiert seinlog_min_messages
.permission denied to set parameter "log_statement"
da mein User kein Superuser ist.GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Sie müssen diese Zeilen auch in PostgreSQL hinzufügen und den Server neu starten:
quelle
Required to be on for csvlogs
, dass diese Option die Ausgabe von Abfragen und nicht nur Anweisungen protokollieren sollte, aber dies ist nicht der Fall.Zu Ihrer Information: Die anderen Lösungen protokollieren normalerweise nur Anweisungen aus der Standarddatenbank
postgres
, um andere zu protokollieren. Beginnen Sie mit ihrer Lösung. dann:Ref: https://serverfault.com/a/376888 /
log_statement
quelle
Stellen Sie ein
log_statement
aufall
:Fehlerberichterstattung und Protokollierung - log_statement
quelle
+1 zu den obigen Antworten. Ich benutze folgende Konfiguration
quelle
Weitere Informationen zu CentOS 6.4 (Red Hat 4.4.7-3), auf dem PostgreSQL 9.2 ausgeführt wird, basieren auf den Anweisungen auf dieser Webseite :
log_statement = 'all'
undlog_min_error_statement = error
in/var/lib/pgsql/9.2/data/postgresql.conf
./usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
./var/lib/pgsql/9.2/data/pg_log/
quelle
pg_ctl reload
ist ausreichend und unterbricht keine Verbindungen. Nicht überzeugt, dass diese Antwort etwas zu denen hinzufügt, die bereits hier sind.Sie sollten diesen Parameter auch so einstellen, dass jede Anweisung protokolliert wird:
quelle
Ich habe versucht
log_statement
, die Datei in einigen Postgres-Konfigurationsdateien festzulegen, aber tatsächlich wurde die Datei von unseren Postgres nicht gelesen.Ich habe das mit der Anfrage bestätigt:
Ich benutze diesen Weg https://stackoverflow.com/a/41912295/2294168
quelle