Pau*_*aul 354 postgresql logging
如何启用PostgreSQL 8.3执行的所有SQL的日志记录?
编辑(更多信息) 我更改了这些行:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
Run Code Online (Sandbox Code Playgroud)
并重新启动PostgreSQL服务...但没有创建日志...我正在使用Windows Server 2003.
有任何想法吗?
Jar*_*die 444
在您的data/postgresql.conf文件中,将log_statement设置更改为'all'.
编辑
查看您的新信息,我会说可能还有一些其他设置需要验证:
log_destination变量logging_collectorlog_directory目录中已存在该data目录,并且postgres用户可以写入该目录.vij*_*jay 94
编辑您的/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中的fire查询 select 2+2
查找当前登录 /var/lib/pgsql/9.2/data/pg_log/
日志文件往往会在一段时间内增长很多,并且可能会杀死您的计算机.为了您的安全,请编写一个bash脚本,该脚本将删除日志并重新启动postgresql服务器.
谢谢@paul,@ Jaret Hardie,@Zoltán,@ Rix Beck,@ Latif Premani
Rix*_*eck 39
SELECT set_config('log_statement', 'all', true);
Run Code Online (Sandbox Code Playgroud)
具有相应的用户权限可以在连接后使用上面的查询.这将影响日志记录,直到会话结束.
小智 35
您还需要在PostgreSQL中添加这些行并重新启动服务器:
log_directory = 'pg_log'
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
Run Code Online (Sandbox Code Playgroud)
A T*_*A T 26
仅供参考:其他解决方案只会记录默认数据库中的语句 - 通常是postgres记录其他语句; 从解决方案开始; 然后:
ALTER DATABASE your_database_name
SET log_statement = 'all';
Run Code Online (Sandbox Code Playgroud)
参考:https://serverfault.com/a/376888 /log_statement
She*_*har 20
+1以上答案.我使用以下配置
log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
Run Code Online (Sandbox Code Playgroud)
Zol*_*tán 10
只是为了获得运行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/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'
Run Code Online (Sandbox Code Playgroud)
然后你必须登录数据库并运行以下命令:
create extension pg_stat_statements;
Run Code Online (Sandbox Code Playgroud)
它将创建名为“pg_stat_statements”的新视图。在此视图中,您可以看到所有已执行的查询。
小智 5
您需要运行下面的查询,然后重新启动 PostgreSQL 以持久启用日志记录。*参数ALTER SYSTEM SET设置为postgresql.auto.conf而不是postgresql.conf:
ALTER SYSTEM SET log_statement = 'all';
Run Code Online (Sandbox Code Playgroud)
并且,您需要运行以下任一查询,然后重新启动 PostgreSQL 以永久禁用日志记录:
ALTER SYSTEM RESET log_statement;
Run Code Online (Sandbox Code Playgroud)
或者:
ALTER SYSTEM SET log_statement = 'none';
Run Code Online (Sandbox Code Playgroud)
您还可以运行下面的查询,然后需要重新启动 PostgreSQL 以持久启用日志记录:
ALTER SYSTEM SET log_min_duration_statement = 0;
Run Code Online (Sandbox Code Playgroud)
并且,您还可以运行以下任一查询,然后需要重新启动 PostgreSQL 以永久禁用日志记录:
ALTER SYSTEM RESET log_min_duration_statement;
Run Code Online (Sandbox Code Playgroud)
或者:
ALTER SYSTEM SET log_min_duration_statement = -1;
Run Code Online (Sandbox Code Playgroud)
请注意,下面的这些查询无法持久启用或禁用日志记录:
SET SESSION log_statement = 'all'
SET log_statement = 'all'
SET LOCAL log_statement = 'all'
Run Code Online (Sandbox Code Playgroud)
SET SESSION log_min_duration_statement = 0;
SET log_min_duration_statement = 0;
SET LOCAL log_min_duration_statement = 0;
Run Code Online (Sandbox Code Playgroud)
或者:
RESET log_statement;
SET SESSION log_statement = 'none'
SET log_statement = 'none'
SET LOCAL log_statement = 'none'
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
374771 次 |
| 最近记录: |