调试信息

postmaster 时不时地打印一些对错误分析很有帮助的信息。如果你想查看来自postmaster 的调试信息,你可以带 -d 选项运行它然后把输出重定向到日志文件:
% postmaster -d > pm.log 2>&1 &
如果你不想看到这些信息,你可以键入
% postmaster -S
然后 postmaster 就会安静下来("S"ilent)。注意上面这个例子没有与号("&"),所以 postmaster 会运行在前台。
 

pg_options

注意:Massimo Dal Zotto 提供
参数文件 data/pg_options 包含被后端用于控制跟踪信息和其他可调节参数的运行时选项.令我们对这个文件感兴趣的是,当后端收到一个 SIGHUP 信号后会重新读取这个文件的信息.这就让我们可以更改 Postgres 的运行时参数而不需要重新启动它.在这个文件中声明的选项可能是被追踪包使用的调试标志 (backend/utils/misc/trace.c)或者是后端用于控制其特性的一些数字参数.新的选项和参数必须在backend/utils/misc/trace.cbackend/include/utils/trace.h 里定义.

pg_options 同样可以使用 Postgres 的 -T 开关来声明:

postgres options -T "verbose=2,query,hostlookup-"
这样,用于打印错误和调试信息的函数就可以利用 syslog(2) 功能了.向标准输出(stdout)或标准错误(stderr)打印的信息是带有时标和后端进程号前缀的字串:
#timestamp          #pid    #message
980127.17:52:14.173 [29271] StartTransactionCommand
980127.17:52:14.174 [29271] ProcessUtility: drop table t;
980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full
980127.17:52:14.186 [29286] Async_NotifyHandler
980127.17:52:14.186 [29286] Waking up sleeping backend process
980127.19:52:14.292 [29286] Async_NotifyFrontEnd
980127.19:52:14.413 [29286] Async_NotifyFrontEnd done
980127.19:52:14.466 [29286] Async_NotifyHandler done
这种格式改善了日志的可读性并且让人们可以弄明白某后端何时在做何事.同样这也让我们很容易写出简单的监控日志的 awk 或 perl 脚本来跟踪数据库错误或问题,或者计算交易时间统计数据.

向 syslog (系统日志)打印的信息使用了日志工具 LOG_LOCAL0.syslog的使用可以由 syslog 的 pg_option 控制.不幸的是,许多函数调用直接用 printf() 把它们的信息输出到标准输出(stdout)或标准错误(stderr)中去了,这样的输出不能重定向到 syslog 而且也不会有时标.我们的建议是所有对printf的调用都用宏 PRINTF 代替,所有向标准错误(stderr)的输出都用 EPRINTF 替换,这样我们就可以将所有输出都控制在统一的方法下.

pg_options 文件的格式如下:

# comment
option=integer_value  # set value for option
option                # set option = 1
option+               # set option = 1
option-               # set option = 0
注意 keyword 可以是定义在 backend/utils/misc/trace.c 里的选项名的缩写.

参考 使用 pg_options 获取选项关键字和可能的取值的完整的列表。