如何为 Heroku Postgresql 设置日志记录级别?

How can I set logging level for Heroku Postgresql?

将 Heroku 与 Postgresql 附加组件一起使用。查看我的日志后,似乎 postgresql 正在记录每一个……单个……事务。我知道您可以通过 (https://www.postgresql.org/docs/9.1/static/runtime-config-logging.html)

之类的操作来设置日志级别
ALTER DATABASE my_database SET log_statement=error;

但是,Heroku 说

ERROR:  permission denied to set parameter "log_statement"

请注意,这可能与 how to turn off Heroku SQL logs from postgres 重复,但他们从未解决如何绕过 Heroku 权限。 (我应该在那张票上开始赏金还是保留这张票?)

如何修改 Heroku Postgresql 日志级别?

更新

以下Get DB owner's name in PostgreSql

pg_catalog.pg_get_userbyid(d.datdba) as "Owner"
FROM pg_catalog.pg_database d
ORDER BY 1;

我得到以下结果

Name        Owner
d7c0sfp134dmml  u2mqn7a68c982v
postgres    postgres
template0   postgres
template1   postgres

ALTER DATABASE d7c0sfp134dmml SET log_statement = error;

结果

ERROR: permission denied to set parameter "log_statement" Query failed PostgreSQL said: permission denied to set parameter "log_statement"

  1. 您错误地解释了文档。 log_statement parameter 不允许 error 值。可能的值是:noneddlmodall(和 default 伪值)。

    您可能还想更改 log_min_messages parameter or log_min_error_statement parameter。它们允许这些值:DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGERRORFATALPANIC。设置 PANIC 以实现最少的日志记录。

  2. 事实是,对于上述所有三个参数,文档说:

    Only superusers can change this setting.

    因此,除非您可以 postgres 用户连接到 PostgreSQL 数据库或直接编辑 PostgreSQL 配置文件,否则您可能无法更改日志记录选项。

    您可以向 Heroku 支持人员询问一些解决方法。但我不知道如何更改日志记录选项,因为它们可能不会为您提供超级用户访问权限。也许你可以要求他们为你做那件事(即更改日志记录选项)或者你可以使用一些特殊工具来过滤日志(不更改日志记录选项),我不知道。

自 2017 年 8 月 8 日起,Heroku Postgres 现在提供通过 PGSettings 功能更改此设置的功能。例如,在 standard-0 或更高级别(无爱好计划)上记录所有语句的命令将是:

heroku pg:settings:log-statement all postgresql-large-1234 -a sushi

参考:https://devcenter.heroku.com/articles/heroku-postgres-settings#log-statement