如何启用日志记录所有执行的SQL PostgreSQL 8.3?
编辑(更多信息) 我修改了这些行:
log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_statement = 'all'
And restart PostgreSQL service…但是没有创建日志… 我使用的是Windows Server 2003
什么好主意吗?
将log_statement设置为all:
log_statement
all
Error Reporting and Logging - log_statement . log . Error Reporting and Logging
在您的data/postgresql.conf文件中,将log_statement设置更改为'all'。
data/postgresql.conf
'all'
编辑
看看你的新信息,我想说可能还有其他一些设置需要验证:
log_destination
logging_collector
log_directory
data
+1到以上答案。我使用以下配置
log_line_prefix = '%t %c %u ' # time sessionid user log_statement = 'all'
SELECT set_config('log_statement', 'all', true);
具有相应权限的用户可以使用以上查询后连接。这将影响日志记录,直到会话结束。
为了获得运行PostgreSQL 9.2的CentOS 6.4 (Red Hat 4.4.7-3)的更多细节,根据在此网页找到的指令:
/var/lib/pgsql/9.2/data/postgresql.conf
log_statement = 'all'
log_min_error_statement = error
/usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
/var/lib/pgsql/9.2/data/pg_log/
你还需要在PostgreSQL中添加这些行,并重新启动服务器:
log_directory = 'pg_log' log_filename = 'postgresql-dateformat.log' log_statement = 'all' logging_collector = on
编辑你的/etc/postgresql/9.3/main/postgresql.conf,并修改如下行。
/etc/postgresql/9.3/main/postgresql.conf
请注意:如果你没有找到postgresql.conf文件,那么只需在终端中键入$locate postgresql.conf
postgresql.conf
$locate postgresql.conf
#log_directory = 'pg_log' 到
#log_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 到
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none' 到
#log_statement = 'none'
#logging_collector = off 到
#logging_collector = off
< >强可选< / >强:SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart 或
sudo /etc/init.d/postgresql restart
在postgresql select 2+2中触发查询
select 2+2
在/var/lib/pgsql/9.2/data/pg_log/中查找当前日志
日志文件在一段时间内会增长很多,可能会杀死您的机器。为了安全起见,编写一个bash脚本,删除日志并重新启动postgresql服务器。
谢谢@paul, @Jarret Hardie, @Zoltán, @Rix Beck, @Latif Premani
供参考:其他解决方案只会记录来自默认数据库(通常是__abc0)的语句来记录其他语句;从他们的解决方案开始;然后:
ALTER DATABASE your_database_name SET log_statement = 'all';
参考:https://serverfault.com/a/376888 / log_statement
你还应该设置这个参数来记录每条语句:
log_min_duration_statement = 0
我试图在一些postgres配置文件中设置log_statement,但实际上该文件没有被我们的postgres读取。
我确认使用请求:
select * from pg_settings [...] log_statement none # That was not the value i was expected for !!!
我使用这种方式https://stackoverflow.com/a/41912295/2294168
command: postgres -c config_file=/etc/postgresql.conf
在postgresql中有一个扩展。它的名字是“pg_stat_statements"”https://www.postgresql.org/docs/9.4/pgstatstatements.html
基本上你需要稍微修改一下postgresql.conf文件:
shared_preload_libraries= 'pg_stat_statements' pg_stat_statements.track = 'all'
然后你必须登录DB并运行以下命令:
create extension pg_stat_statements;
它将创建名为“pg_stat_statements"”的新视图。在这个视图中,您可以看到所有已执行的查询。
动态地,我们可以用两种方式启用/禁用日志记录
在这两种情况下,我们都不应该重新启动Postgres。我们可以通过配置重新加载动态启用/禁用日志记录。
我希望这对你有所帮助。