'How to log PostgreSQL queries?
How to enable logging of all SQL executed by PostgreSQL 8.3?
Edited (more info) I changed these lines :
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
And restart PostgreSQL service... but no log was created... I'm using Windows Server 2003.
Any ideas?
Solution 1:[1]
Edit your /etc/postgresql/9.3/main/postgresql.conf, and change the lines as follows.
Note: If you didn't find the postgresql.conf file, then just type $locate postgresql.conf in a 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 = offtologging_collector = onOptional:
SELECT set_config('log_statement', 'all', true);sudo /etc/init.d/postgresql restartorsudo service postgresql restartFire query in postgresql
select 2+2Find current log in
/var/lib/pgsql/9.2/data/pg_log/
The log files tend to grow a lot over a time, and might kill your machine. For your safety, write a bash script that'll delete logs and restart postgresql server.
Thanks @paul , @Jarret Hardie , @Zoltán , @Rix Beck , @Latif Premani
Solution 2:[2]
FYI: The other solutions will only log statements from the default database—usually postgres—to log others; start with their solution; then:
ALTER DATABASE your_database_name
SET log_statement = 'all';
Solution 3:[3]
SELECT set_config('log_statement', 'all', true);
With a corresponding user right may use the query above after connect. This will affect logging until session ends.
Solution 4:[4]
You also need add these lines in PostgreSQL and restart the server:
log_directory = 'pg_log'
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
Solution 5:[5]
Set log_statement to all:
Solution 6:[6]
+1 to above answers. I use following config
log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
Solution 7:[7]
Just to have more details for CentOS 6.4 (Red Hat 4.4.7-3) running PostgreSQL 9.2, based on the instructions found on this web page:
- Set (uncomment)
log_statement = 'all'andlog_min_error_statement = errorin/var/lib/pgsql/9.2/data/postgresql.conf. - Reload the PostgreSQL configuration. For me, this was done by running
/usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/. - Find today's log in
/var/lib/pgsql/9.2/data/pg_log/
Solution 8:[8]
There is an extension in postgresql for this. It's name is "pg_stat_statements". https://www.postgresql.org/docs/9.4/pgstatstatements.html
Basically you have to change postgresql.conf file a little bit:
shared_preload_libraries= 'pg_stat_statements'
pg_stat_statements.track = 'all'
Then you have to log in DB and run this command:
create extension pg_stat_statements;
It will create new view with name "pg_stat_statements". In this view you can see all the executed queries.
Solution 9:[9]
You should also set this parameter to log every statement:
log_min_duration_statement = 0
Solution 10:[10]
I was trying to set the log_statement in some postgres config file but in fact the file was not read by our postgres.
I confirmed that using the request :
select *
from pg_settings
[...]
log_statement none # That was not the value i was expected for !!!
I use this way https://stackoverflow.com/a/41912295/2294168
command: postgres -c config_file=/etc/postgresql.conf
Solution 11:[11]
Dynamically we can enable/disable the logging in 2 ways
- Change the global variables in DB and reload the configuration a) Set log_statement = 'all'; or set log_min_duration_statement = 0; b) select pg_reload_conf();
- From the Linux command line, edit the postgres configuration file, change the log related parameters log_min_duration_statement = 0 log_statement = 'all' Reload the configuration file su - postgres /usr/bin/pg_ctl reload
In both these cases, we should not be doing a Postgres restart. We can dynamically enable/disable logging with configuration reload.
I hope this should be helpful.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
