如何为 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"
您错误地解释了文档。 log_statement
parameter 不允许 error
值。可能的值是:none
、ddl
、mod
、all
(和 default
伪值)。
您可能还想更改 log_min_messages
parameter or log_min_error_statement
parameter。它们允许这些值:DEBUG5
、DEBUG4
、DEBUG3
、DEBUG2
、DEBUG1
、LOG
、NOTICE
、WARNING
、ERROR
、FATAL
和 PANIC
。设置 PANIC
以实现最少的日志记录。
事实是,对于上述所有三个参数,文档说:
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
将 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"
您错误地解释了文档。
log_statement
parameter 不允许error
值。可能的值是:none
、ddl
、mod
、all
(和default
伪值)。您可能还想更改
log_min_messages
parameter orlog_min_error_statement
parameter。它们允许这些值:DEBUG5
、DEBUG4
、DEBUG3
、DEBUG2
、DEBUG1
、LOG
、NOTICE
、WARNING
、ERROR
、FATAL
和PANIC
。设置PANIC
以实现最少的日志记录。事实是,对于上述所有三个参数,文档说:
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