Comment activer la journalisation de tous les SQL exécutés par PostgreSQL 8.3?
Edité (plus d'infos) J'ai changé ces lignes:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
Et redémarrez le service PostgreSQL ... mais aucun journal n'a été créé ... J'utilise Windows Server 2003.
Des idées?
Dans votre fichier data/postgresql.conf
, modifiez le paramètre log_statement
en 'all'
.
Éditer
En regardant vos nouvelles informations, je dirais qu'il peut y avoir quelques autres paramètres à vérifier:
log_destination
logging_collector
log_directory
existe déjà dans le répertoire data
et que l'utilisateur postgres peut y écrire.Modifiez votre /etc/postgresql/9.3/main/postgresql.conf
et modifiez les lignes comme suit.
Note: Si vous n'avez pas trouvé le fichier postgresql.conf
, tapez simplement $locate postgresql.conf
dans un terminal
#log_directory = 'pg_log'
tolog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
tolog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
tolog_statement = 'all'
#logging_collector = off
tologging_collector = on
Facultatif: SELECT set_config('log_statement', 'all', true);
Sudo /etc/init.d/postgresql restart
oSudo service postgresql restart
Requête d'incendie dans postgresql select 2+2
Trouver le journal actuel dans /var/lib/pgsql/9.2/data/pg_log/
Les fichiers journaux ont tendance à grandir avec le temps et risquent de tuer votre ordinateur. Pour votre sécurité, écrivez un script bash qui supprime les journaux et redémarre le serveur postgresql.
Merci @paul, @Jarret Hardie, @ Zoltán, @Rix Beck, @Latif Premani
SELECT set_config('log_statement', 'all', true);
Avec un droit d'utilisateur correspondant, vous pouvez utiliser la requête ci-dessus après la connexion. Cela affectera la journalisation jusqu'à la fin de la session.
Vous devez également ajouter ces lignes dans PostgreSQL et redémarrer le serveur:
log_directory = 'pg_log'
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
Définissez log_statement
sur all
:
Rapport d'erreurs et journalisation - instruction log_statement
FYI: les autres solutions ne consignent que les instructions de la base de données par défaut (généralement postgres
) pour consigner les autres; commencer par leur solution; ensuite:
_ALTER DATABASE your_database_name
SET log_statement = 'all';
_
+1 aux réponses ci-dessus. J'utilise la configuration suivante
log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
Juste pour avoir plus de détails sur CentOS 6.4 (Red Hat 4.4.7-3) exécutant PostgreSQL 9.2, basé sur les instructions trouvées sur cette page web :
log_statement = 'all'
et log_min_error_statement = error
dans /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/