场景:您正在为其他人托管 PostgreSQL 并希望提供良好的服务。
作为数据库托管者,我希望了解 Postgres 何时崩溃以及其他与管理相关的信息。但是,“ERROR”和“FATAL”标记都包含由客户端行为生成的错误。
- “错误” 特别受污染,无法被考虑用于警报。
- “FATAL” 污染较少,包含重要的 Postgres 错误。(例如启动和内存问题)
有没有办法配置 Postgres 来区分服务器和客户端日志?
答案1
可以配置服务器(每个会话)向客户端发送哪些消息。“每个会话”意味着任何客户端都可以在会话开始时将变量设置为适当的值。设置是客户端最小消息数:
控制哪些消息级别发送给客户端。有效值为 DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、LOG、NOTICE、WARNING 和 ERROR。每个级别都包括其后的所有级别。级别越靠后,发送的消息越少。默认值为 NOTICE。请注意,此处的 LOG 级别与log_min_messages。
INFO 级别的消息始终会发送给客户端。
因此让客户端在会话开始时执行以下操作:
SET client_min_messages to 'DEBUG5';
他们将获得一切皆有可能:
postgres=# select * from pg_views;
DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
DEBUG: rehashing catalog cache id 7 for pg_attribute; 257 tups, 128 buckets
DEBUG: rehashing catalog cache id 7 for pg_attribute; 513 tups, 256 buckets
DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
这完全独立于配置的服务器日志其他设置。