PostgreSQL:如何开启日志记录?

3

我按照如何记录PostgreSQL查询?所述的方法进行操作,但日志收集器仍然未开启。

    postgres=# show logging_collector;
    logging_collector
    -------------------
    off
    (1 row)

我的postgresql.conf文件看起来像这样:

    listen_addresses = '*'
    tcpip_socket = true
    log_statement = 'all'
    log_connections = yes
    log_destination = 'syslog'
    logging_collector = on
    log_directory = '/var/log/pg_log'
    log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
    log_truncate_on_rotation = true
    log_rotation_age = 1440
    client_min_messages = LOG
    log_min_messages = INFO
    log_min_error_statement = DEBUG5
    log_min_duration_statement = 0
2个回答

4

通常只需要这样

pg_reload_conf()

重新读取postgres.conf文件

https://www.postgresql.org/docs/current/static/functions-admin.html

pg_reload_conf() 使服务器进程重新加载其配置文件。

但是:

t=# select name,setting,unit,source,context from pg_settings where name = 'logging_collector';
       name        | setting | unit |       source       |  context
-------------------+---------+------+--------------------+------------
 logging_collector | on      |      | configuration file | postmaster
(1 row)

https://www.postgresql.org/docs/current/static/view-pg-settings.html

postmaster 这些设置只能在服务器启动时应用,因此任何更改都需要重新启动服务器。这些设置的值通常存储在postgresql.conf文件中,或在启动服务器时通过命令行传递。当然,任何较低上下文类型的设置也可以在服务器启动时设置。

所以这意味着您需要重新启动您的集群。


小错误 - 第一个代码块中的 pg_reload_config() 应该根据第二个高亮显示更改为 pg_reload_conf() - rjp
1
重新加载具有新配置的服务器的命令是:SELECT pg_reload_conf(); - Kevin G

0
在我的情况下,我遵循了这份文档,但它没有显示查询日志(这是我的意图),但它没有起作用。然后我将这些参数添加到postgres.conf文件中,日志就被显示出来了:
event_source = 'PostgreSQL'

log_statement = 'all'

两者默认都被注释掉了。


这仅适用于Windows。 - mrbarletta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接