如何启用PostgreSQL 8.3执行的所有SQL的日志记录?
已编辑(更多信息) 我改变了这些路线:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
重启PostgreSQL服务......但没有创建日志...... 我正在使用Windows Server 2003。
有什么想法吗?
答案 0 :(得分:422)
在data/postgresql.conf
文件中,将log_statement
设置更改为'all'
。
修改强>
查看您的新信息,我会说可能还有其他一些设置需要验证:
log_destination
变量logging_collector
log_directory
目录中已存在data
目录,并且postgres用户可以写入该目录。答案 1 :(得分:86)
修改/etc/postgresql/9.3/main/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 = 'all'
#logging_collector = off
logging_collector = on
可选:SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart
或 sudo service postgresql restart
在postgresql select 2+2
在/var/lib/pgsql/9.2/data/pg_log/
日志文件往往会在一段时间内增长很多,并且可能会杀死您的计算机。为了您的安全,请编写一个bash脚本,该脚本将删除日志并重新启动postgresql服务器。
谢谢@paul,@ Jarret Hardie,@Zoltán,@ Rix Beck,@ Latif Premani
答案 2 :(得分:37)
SELECT set_config('log_statement', 'all', true);
使用相应的用户权限可以在连接后使用上面的查询。这将影响记录,直到会话结束。
答案 3 :(得分:33)
您还需要在PostgreSQL中添加这些行并重新启动服务器:
log_directory = 'pg_log'
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
答案 4 :(得分:24)
将log_statement
设为all
:
答案 5 :(得分:20)
+1以上答案。我使用以下配置
log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
答案 6 :(得分:19)
仅供参考:其他解决方案只会记录默认数据库中的语句 - 通常是postgres
- 以记录其他语句;从解决方案开始;然后:
ALTER DATABASE your_database_name
SET log_statement = 'all';
答案 7 :(得分:10)
根据发现on this web page的说明,了解运行PostgreSQL 9.2的CentOS 6.4(Red Hat 4.4.7-3)的更多细节:
log_statement = 'all'
中设置(取消注释)log_min_error_statement = error
和/var/lib/pgsql/9.2/data/postgresql.conf
。/usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
。/var/lib/pgsql/9.2/data/pg_log/
答案 8 :(得分:0)
您还应该设置此参数以记录每条语句:
log_min_duration_statement = 0
答案 9 :(得分: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
答案 10 :(得分:0)
在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”的新视图。在此视图中,您可以看到所有已执行的查询。