PostgreSQL7.0手册-管理员手册-27. 运行时环境
内容
在 Unix 里使用 Postgres
启动 postmaster
使用 pg_options
本章描述 Postgres 和操作系统之间的关系.
在 Unix 里使用 Postgres
所有直接从 Unix shell 运行的 Postgres 命令都放在 “.../bin”.将这个目录包含在你的搜索目录中可以让你执行命令更容易些.
每个节点都有一套系统表.包括一个载有所有有效的 Postgres 用户记录的表(pg_user)。这些记录声明一套 Postgres 权限,比如说是否拥有Postgres 超级用户权限,创建/删除数据库的权限,以及更新数据库系统表的权限等.除非一个 Unix 用户在这个表里面有合适的记录,否则他在 Postgres 里不能做任何事情.另外,更详细的系统表的信息可以通过查询对应的表的方式来获得。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
启动 postmaster
除非 postmaster 进程在运行,否则我们无法对数据库进行任何操作.作为节点管理员,在运行 postmaster 之前有许多事情要注意.这些都已经在本手册安装和配置章节中讨论过.不过,如果 Postgres 是完全按照安装指导中描述的那样安装的话,下面的简单命令就是你运行 postmaster 所要执行的:
% postmaster
postmaster 有时会打印出对排除问题很有帮助的信息.如果你希望看到 postmaster 输出的调试信息,你可以带 -d 选项运行之然后把输出重定向到一个日志文件中:
% postmaster -d > pm.log 2>&1 &
如果你不希望看到这些信息,可以键入
% postmaster -S
postmaster 就会"安静"下来.在这个例子里不需要有一个与号("&")在行尾,因为当声明 -S 后 postmaster 自动于终端分离.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
使用 pg_options
注意:由 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 里的选项名的缩写.
例 27-1. pg_options 文件
例如,我的 pg_options 文件包含下面的值:
verbose=2
query
hostlookup
showportnumber
可识别的选项
目前已经定义的选项是:
all
全局追踪标志,允许的值是:
0
追踪信息(一个一个)分别打开
1
打开所有追踪信息
-1
关闭所有追踪信息
verbose
冗长标志.允许的值是:
0
没有信息,这是缺省值.
1
打印消息信息.
2
打印更多消息信息.
query
查询追踪标志,允许的值是:
0
不打印查询.
1
在一行内打印压缩了的查询.
4
打印全部查询.
plan
打印查询规划.
parse
打印分析器输出.
rewritten
打印重写了的查询.
pretty_plan
漂亮地(?)打印查询规划.
pretty_parse
漂亮地(?)打印分析器输出.
pretty_rewritten
漂亮地(?)打印重写了的查询.
parserstats
打印分析器统计.
plannerstats
打印规划器统计信息.
executorstats
打印执行器统计信息.
shortlocks
当前没有使用但将来需要使用的特性.
locks
追踪锁.
userlocks
追踪用户锁.
spinlocks
追踪旋转锁.
notify
追踪通知函数.
malloc
目前未用.
palloc
目前未用.
lock_debug_oidmin
锁追踪的最小的关系对象标识(oid).
lock_debug_relid
oid,如果为非零,由锁追踪的关系.
lock_read_priority
目前未用.
deadlock_timeout
死锁检测计时器.
syslog
syslog 标志.允许的值是:
0
消息输出到标准输出/标准错误(stdout/stderr).
1
消息输出到标准输出/标准错误 (stdout/stderr)和 syslog.
2
消息只输出到 syslog.
hostlookup
打开在 ps_status 里的主机名查找.
showportnumber
在 ps_status 里显示端口号.
nofsync
以每用户为单位关闭 fsync.
--------------------------------------------------------------------------------