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?

312
demandé sur ROMANIA_engineer 2009-04-06 20:34:32

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épertoire data, et que l'utilisateur postgres peut y écrire.
397
répondu Jarret Hardie 2014-11-17 19:20:32

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

  1. #log_directory = 'pg_log' pour log_directory = 'pg_log'

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

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

  4. #logging_collector = off pour logging_collector = on

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

  6. sudo /etc/init.d/postgresql restart ou sudo service postgresql restart

  7. Le Feu de la requête dans postgresql select 2+2

  8. 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

69
répondu vijay 2016-01-27 13:02:26
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.

34
répondu Rix Beck 2013-05-16 14:18:59

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
26
répondu Latif Premani 2014-07-11 20:00:06
24
répondu Chad Birch 2009-04-06 16:37:33

+ 1 aux réponses ci-dessus. J'utilise la configuration suivante

log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
19
répondu Shekhar 2010-04-08 09:53:12

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';

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

15
répondu A T 2017-08-08 08:45:54

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 :

  1. définir (décommenter) log_statement = 'all' et log_min_error_statement = error dans /var/lib/pgsql/9.2/data/postgresql.conf.
  2. 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/.
  3. trouver le journal d'aujourd'hui /var/lib/pgsql/9.2/data/pg_log/
9
répondu Zoltán 2013-12-09 09:33:30