Cómo registrar consultas PostgreSQL?

¿Cómo habilitar el registro de todos los SQL ejecutados por PostgreSQL 8.3?

Editado (más información) Cambié estas líneas:

log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_statement = 'all' 

Y reinicie el servicio de PostgreSQL … pero no se creó ningún registro … Estoy usando Windows Server 2003.

¿Algunas ideas?

En su archivo data/postgresql.conf , cambie la configuración de log_statement a 'all' .


Editar

En cuanto a su nueva información, diría que puede haber algunas otras configuraciones para verificar:

  • asegúrese de haber activado la variable log_destination
  • asegúrese de encender el logging_collector
  • También asegúrese de que el directorio pg_log ya existe dentro del directorio de data y que el usuario de postgres puede escribir en él.

Edite su /etc/postgresql/9.3/main/postgresql.conf , y cambie las líneas de la siguiente manera.

Nota : Si no encontró el archivo postgresql.conf , simplemente escriba $locate postgresql.conf en una terminal

  1. #log_directory = 'pg_log' a log_directory = 'pg_log'

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

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

  4. #logging_collector = off a logging_collector = on

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

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

  7. Consulta de incendios en postgresql select 2+2

  8. Encuentre el registro actual en /var/lib/pgsql/9.2/data/pg_log/

Los archivos de registro tienden a crecer mucho durante un tiempo y pueden matar su máquina. Para su seguridad, escriba un script bash que borrará los registros y reiniciará el servidor postgresql.

Gracias @paul, @Jarret Hardie, @Zoltán, @Rix Beck, @Latif Premani

 SELECT set_config('log_statement', 'all', true); 

Con un derecho de usuario correspondiente puede usar la consulta anterior después de conectar. Esto afectará el registro hasta que finalice la sesión.

También necesita agregar estas líneas en PostgreSQL y reiniciar el servidor:

 log_directory = 'pg_log' log_filename = 'postgresql-dateformat.log' log_statement = 'all' logging_collector = on 

Establezca log_statement a all :

Informe de errores y registro – log_statement

+1 a las respuestas anteriores. Yo uso las siguientes configuraciones

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

FYI: Las otras soluciones solo registrarán declaraciones de la base de datos predeterminada, generalmente postgres para registrar otras; comenzar con su solución; entonces:

 ALTER DATABASE your_database_name SET log_statement = 'all'; 

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

Solo para tener más detalles para CentOS 6.4 (Red Hat 4.4.7-3) ejecutando PostgreSQL 9.2, según las instrucciones que se encuentran en esta página web :

  1. Set (descomentar) log_statement = 'all' y log_min_error_statement = error en /var/lib/pgsql/9.2/data/postgresql.conf .
  2. Recargue la configuración de PostgreSQL. Para mí, esto se hizo ejecutando /usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/ .
  3. Encuentra el registro de hoy en /var/lib/pgsql/9.2/data/pg_log/