postmaster [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [-D datadir] [-F] [-h hostname] [-i] [-k directory] [-l] [-N max-connections] [-o extra-options] [-p port] [-S] [-n | -s]
postmaster 是 PostgreSQL 多用户数据库服务器. 一个客户端为了访问一个数据库,它(通过网络或本地) 联接到一个运行着的 postmaster. 然后该 postmaster 启动一个独立的 服务器进程( “postgres ”) 以操作联接. postmaster 还控制服务器进程之间的通讯.
缺省时postmaster 在前台启动并且向标准输出打印日志信息. 在实际应用里,postmaster 应该作为后台进程启动,也许该在启动时.
一个postmaster 总是管理来自同一个数据库集群的数据. 一个数据库集群是一套在同一个文件系统位置存放数据的数据库. 当 postmaster 启动时,它需要知道数据库集群文件 (“数据区”)的位置. 这个参数是通过传递 -D 命令行选项或者 PGDATA 环境变量实现的,没有缺省值. 一个系统上同时可以运行几个 postmaster 进程, 只要他们使用不同的数据区和不同的端口号(见下文). 一个数据区是用 initdb 创建的.
postmaster 接受下列命令行参数. 关于这些选项的更详细的讨论请参考 管理员手册.你也可以通过设置一个配置文件 来减少敲击这些选项.
打开运行时断言检查,是检测编程错误的调试帮助. 只有在编译时打开了它,你才能使用它.如果编译时打开了,缺省是打开.
为服务器进程分配和管理的共享内存缓冲区数量。 此值缺省为 64 个缓冲区,每个缓冲区是 8k 字节。
设置一个命名的运行时参数.参考 管理员手册 获取列表和描述. 大多数其他命令行选项实际上都是这样的参数赋值的短形式.
在一些系统上,你也可以使用等价的GNU风格的长选项,形式是 --name=value.
设置调试级别.数值越高,写到服务器日志的调试输出越多. 缺省是 0,意思是没有调试.最高可以设为 4.
声明数据目录的文件系统路径.参阅上文的讨论.
关闭 fsync 调用,提高性能,但是要冒 数据毁坏的风险.在使用这个选项前先读一下详细文档!
声明 postmaster 侦听着等待来自前端应用联接的 TCP/IP 主机名或地址. 它缺省侦听所有配置了的地址(包括 localhost).
这个选项打开 TCP/IP (网际域套接字)通讯。 没有这个选项,只能进行本地 Unix 域套接字通讯。
声明 postmaster 侦听着等待来自前端应用联接的 Unix 域套接字的位置. 缺省通常是 /tmp,但是可以在制作的时候修改.
这个选项打开用 SSL 进行的安全通讯。同样还需要 -i 选项。要使用这个选项,编译时你必须打开了 SSL 选项。
设置postmaster 允许启动的后端服务器的最大数目。缺省配置时,该值为 32, 如果你的系统能支持更多进程,该值最大可以设置为 1024。 缺省值和最大值都可以在制作 Postgres 时修改(参阅 src/include/config.h)。 (请注意-B选项要求至少是两倍-N)
在 extra-options 里声明的 postgres 选项都传递给所有由这个 postmaster. 启动的后端服务进程。 参阅 postgres 获取可能选项. 如果选项字串包含任何空白,整个字串必须引起来。
声明 postmaster 侦听着等待客户端应用连接的互联网 TCP/IP 端口或一个本地 Unix 域套接字文件扩展(描述符). 缺省的端口号是环境变量 PGPORT 的值。如果没有设置 PGPORT 缺省是 Postgres 编译时建立的值(通常是 5432)。 如果你声明了一个非缺省端口,那么所有前端应用(包括 psql)都必须用命令行选项或者 PGPORT 声明同一个端口。
指明 postmaster 进程将以安静模式启动。也就是说, 它将与用户的(控制)tty 脱离并且启动其自身的进程组。 并且它把标准输出和标准错误重定向到 /dev/null。
使用这个开关会将日志输出都丢弃,可能不是你希望的, 因为这样令错误查找非常困难.参阅下文获取一个在后台启动 postmaster 的更好的方法.
有两个额外的命令行选项可以用于调试导致后端异常退出. 这些选项控制这种环境下的 postmaster 的性质,而且没有哪个选项是为普通操作准备的.
用于这种状况的一般策略是通知所有其它后端必须退出, 然后重新初始化共享内存和信号灯。这是因为一个出错的 后端在退出前可能已经破坏了一些共享的状态。
这些特殊选项是:
postmaster 将不会重新初始化共享数据结构。 一个有经验的系统程序员这时就可以使用调试器 检查共享内存和信号灯状态。
postmaster 将通过发送信号 SIGSTOP 停止所有其他后端进程,但不会导致它们退出。 这样就允许系统程序员手工 从所有后端进程收集倾倒的核心(core dumps)。
如果你看到这条信息,你应该运行 ipcclean 命令。干完这个之后,试着重新启动 postmaster。 如果还不行, 你可能需要按照安装指导里描述的那样配置你的内核的共享内存和信号灯。 如果你在一台主机上运行多个 postmaster 实例,或者如果你的内核的共享内存和/或信号灯被限制得很小, 你可能要重新配置你的内核以增加共享内存和信号灯参数。
小技巧: 你也可以通过降低-B的参数以减少 Postgres的共享内存的消耗, 或者降低 -N 的参数减少 Postgres 的信号灯的消耗, 以此可以推迟重新配置内核。
如果看到这样的信息,你应该确保没有其他的 postmaster 进程正在运行。判断这个情况的最简单的办法是使用命令
$ ps ax | grep postmaster或者
$ ps -e | grep postmaster具体使用哪种取决于你的系统.
如果你确信没有其他 postmaster 进程在运行但是你还是收到这个错误信息,试着用 -p 选项声明一个不同的端口。 如果你终止 postmaster 后又马上用同一个端口运行它,你也有可能得到这个错误信息; 这时,你必须多等几秒,等操作系统关闭了该端口后再试。 最后如果你使用了一个操作系统认为是保留的端口,也可能导致这个错误信息。 例如,我的 Unix 版本认为低于 1024 的端口号是 可信任的 因而只有 Unix 超级用户可以使用它们。
如果有可能, 不要 使用 SIGKILL 杀死 postmaster。 这样会阻止 postmaster 在退出前释放它持有的系统资源(例如共享内存和信号灯)。
要正常结束 postmaster,可以使用信号 SIGTERM,SIGINT, 或 SIGQUIT . 第一个信号将等待所有的客户端退出后才退出. 第二个将强制断开所有客户端,而第三个将不停止立刻退出, 导致在重起时的恢复运行.
工具命令 pg_ctl 可以用于安全而有效地启停 postmaster.