如何启用日志记录所有执行的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。

什么好主意吗?


当前回答

供参考:其他解决方案只记录默认数据库(通常是postgres)中的语句,以记录其他语句;从他们的解决方案开始;然后:

ALTER DATABASE your_database_name
SET log_statement = 'all';

参考:https://serverfault.com/a/376888 / log_statement

其他回答

您需要运行下面的查询,然后重新启动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;

将log_statement设置为all:

错误报告和日志记录- log_statement

SELECT set_config('log_statement', 'all', true);

具有相应权限的用户可以使用以上查询后连接。这将影响日志记录,直到会话结束。

你还需要在PostgreSQL中添加这些行,并重新启动服务器:

log_directory = 'pg_log'                    
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on

我试图在一些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