如何记录PostgreSQL查询?

时间:2009-04-06 16:34:32

标签: postgresql logging

如何启用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。

有什么想法吗?

11 个答案:

答案 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

  1. #log_directory = 'pg_log' log_directory = 'pg_log'

  2. #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

  3. #log_statement = 'none' log_statement = 'all'

  4. #logging_collector = off logging_collector = on

  5. 可选SELECT set_config('log_statement', 'all', true);

  6. sudo /etc/init.d/postgresql restart sudo service postgresql restart

  7. 在postgresql select 2+2

  8. 中进行Fire查询
  9. /var/lib/pgsql/9.2/data/pg_log/

  10. 中查找当前日志

    日志文件往往会在一段时间内增长很多,并且可能会杀死您的计算机。为了您的安全,请编写一个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

Error Reporting and Logging - log_statement

答案 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';

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

答案 7 :(得分:10)

根据发现on this web page的说明,了解运行PostgreSQL 9.2的CentOS 6.4(Red Hat 4.4.7-3)的更多细节:

  1. log_statement = 'all'中设置(取消注释)log_min_error_statement = error/var/lib/pgsql/9.2/data/postgresql.conf
  2. 重新加载PostgreSQL配置。对我来说,这是通过运行/usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
  3. 来完成的
  4. 查找今天的登录/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”的新视图。在此视图中,您可以看到所有已执行的查询。