Comment enregistrer les requêtes PostgreSQL?
Comment activer la journalisation de tous les SQL exécutés par PostgreSQL 8.3?
édité (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éé... Je suis à l'aide de Windows Server 2003.
Des idées?
8 réponses
Dans votre fichier data/postgresql.conf
, remplacez le paramètre log_statement
par 'all'
.
Modifier
En regardant vos nouvelles informations, je dirais qu'il peut y avoir quelques autres paramètres à vérifier:
- assurez-vous d'avoir activé la variable
log_destination
- assurez-vous d'activer le
logging_collector
- assurez-vous également que le répertoire
pg_log
existe déjà dans le répertoiredata
, et que l'utilisateur postgres peut y écrire.
Modifier votre /etc/postgresql/9.3/main/postgresql.conf
, et modifiez les lignes comme suit.
Note: Si vous n'avez pas trouvé le postgresql.conf
fichier, puis tapez $locate postgresql.conf
dans un terminal
#log_directory = 'pg_log'
pourlog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
pourlog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
pourlog_statement = 'all'
#logging_collector = off
pourlogging_collector = on
En Option:
SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart
ousudo service postgresql restart
Le Feu de la requête dans postgresql
select 2+2
Trouver le journal actuel dans
/var/lib/pgsql/9.2/data/pg_log/
Les fichiers journaux ont tendance à se développer beaucoup au fil du temps, et pourraient tuer votre machine. Pour votre sécurité, écrivez un script bash qui supprimera les journaux et redémarrera postgresql server.
Merci @ paul, @ jarret Hardie , @Zoltán , @Rix Beck, @ Latif Premani
SELECT set_config('log_statement', 'all', true);
Avec un droit d'utilisateur correspondant peut 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
+ 1 aux réponses ci-dessus. J'utilise la configuration suivante
log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
POUR INFO: les autres solutions ne consigneront que les instructions de la base de données par défaut-généralement postgres
-pour consigner les autres; commencez par leur solution; puis:
ALTER DATABASE your_database_name
SET 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 :
- définir (décommenter)
log_statement = 'all'
etlog_min_error_statement = error
dans/var/lib/pgsql/9.2/data/postgresql.conf
. - rechargez la configuration PostgreSQL. Pour moi, cela a été fait en exécutant
/usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
. - trouver le journal d'aujourd'hui
/var/lib/pgsql/9.2/data/pg_log/