web-dev-qa-db-fra.com

Comment enregistrer les requêtes PostgreSQL?

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?

347
Paul

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:

  • assurez-vous d'avoir activé la variable log_destination
  • assurez-vous d'activer le logging_collector
  • assurez-vous également que le répertoire log_directory existe déjà dans le répertoire data et que l'utilisateur postgres peut y écrire.
434
Jarret Hardie

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

  1. #log_directory = 'pg_log'tolog_directory = 'pg_log'

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

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

  4. #logging_collector = offtologging_collector = on

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

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

  7. Requête d'incendie dans postgresql select 2+2

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

92
vijay
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.

37
Rix Beck

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
34
Latif Premani
24
Chad Birch

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

Réf.: https://serverfault.com/a/376888 / log_statement

22
A T

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

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

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éfinissez (décommentez) 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 du jour /var/lib/pgsql/9.2/data/pg_log/
10
Zoltán