注意:由 Massimo Dal Zotto 提供可选的参数文件 data/pg_options 包含被后端用于控制跟踪信息和其他可调节参数的运行时选项.当后端收到一个 SIGHUP 信号后会重新读取这个文件的信息.这就让我们可以动态更改 Postgres 的运行时参数而不需要重新启动它.在这个文件中声明的选项可能是被追踪包使用的调试标志 (backend/utils/misc/trace.c)或者是后端用于控制其特性的一些数字参数.
在后端启动的时候所有 pg_options 都初始化为零.新的或者被改变了的选项将被所有新启动的后端读取.要令选项的更改对所有正在运行的后端都起做用,我们要向 postmaster 发送一个 SIGHUP 信号.该信号将自动发送给所有后端.我们也可以通过给指定的后端发送 SIGHUP 信号的方法来让更改只对某个后端生效.
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 文件包含下面的值:
verbose=2 query hostlookup showportnumber
以每用户为单位关闭 fsync.