如何启用日志记录所有执行的SQL PostgreSQL 8.3?
已编辑(更多信息) 我修改了这几行:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
重启PostgreSQL服务…但是没有创建日志… 我用的是Windows Server 2003。
什么好主意吗?
如何启用日志记录所有执行的SQL PostgreSQL 8.3?
已编辑(更多信息) 我修改了这几行:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
重启PostgreSQL服务…但是没有创建日志… 我用的是Windows Server 2003。
什么好主意吗?
当前回答
您需要运行下面的查询,然后重新启动PostgreSQL以持久地启用日志记录。* ALTER SYSTEM SET的参数设置为postgresql.auto.conf而不是postgresql.conf:
ALTER SYSTEM SET log_statement = 'all';
并且,你需要运行下面的任意一个查询,然后重新启动PostgreSQL以永久禁用日志记录:
ALTER SYSTEM RESET log_statement;
Or:
ALTER SYSTEM SET log_statement = 'none';
你也可以运行下面的查询,然后需要重新启动PostgreSQL以启用持久日志记录:
ALTER SYSTEM SET log_min_duration_statement = 0;
并且,你也可以运行下面的查询,然后需要重新启动PostgreSQL来永久禁用日志记录:
ALTER SYSTEM RESET log_min_duration_statement;
Or:
ALTER SYSTEM SET log_min_duration_statement = -1;
注意,下面这些查询不能持久地启用或禁用日志记录:
SET SESSION log_statement = 'all'
SET log_statement = 'all'
SET LOCAL log_statement = 'all'
SET SESSION log_min_duration_statement = 0;
SET log_min_duration_statement = 0;
SET LOCAL log_min_duration_statement = 0;
Or:
RESET log_statement;
SET SESSION log_statement = 'none'
SET log_statement = 'none'
SET LOCAL log_statement = 'none'
RESET log_min_duration_statement;
SET SESSION log_min_duration_statement = -1;
SET log_min_duration_statement = -1;
SET LOCAL log_min_duration_statement = -1;
其他回答
动态地,我们可以用两种方式启用/禁用日志记录
更改DB中的全局变量并重新加载配置 a)设置log_statement = 'all';或者设置log_min_duration_statement = 0; B) select pg_reload_conf(); 从Linux命令行,编辑postgres配置文件,修改日志相关参数 Log_min_duration_statement = 0 Log_statement = 'all' 重新加载配置文件 Su - postgres /usr/bin/pg_ctl重载
在这两种情况下,我们都不应该重新启动Postgres。我们可以通过配置重新加载动态启用/禁用日志记录。
我希望这对你有所帮助。
编辑/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 - H % d_ % % m % S.log”log_filename =“postgresql - Y % % m - H % d_ % % 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选择2+2 在/var/lib/ pg_sql /9.2/data/pg_log/中查找当前日志
日志文件在一段时间内会增长很多,可能会杀死您的机器。为了安全起见,编写一个bash脚本,删除日志并重新启动postgresql服务器。
谢谢@paul, @Jarret Hardie, @Zoltán, @Rix Beck, @Latif Premani
你还需要在PostgreSQL中添加这些行,并重新启动服务器:
log_directory = 'pg_log'
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
将log_statement设置为all:
错误报告和日志记录- log_statement
供参考:其他解决方案只记录默认数据库(通常是postgres)中的语句,以记录其他语句;从他们的解决方案开始;然后:
ALTER DATABASE your_database_name
SET log_statement = 'all';
参考:https://serverfault.com/a/376888 / log_statement