postmaster

Name

postmaster -- PostgreSQL多用户数据库服务器

Synopsis

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] [--name=value] [-n | -s]

描述

postmasterPostgreSQL 多用户数据库服务器。 一个客户端为了访问一个数据库,它(通过网络或本地)联接到一个运行着的 postmaster。 然后该 postmaster 启动一个独立的服务器进程("postgres") 以操作联接。 postmaster 还控制服务器进程之间的通讯。

缺省时postmaster在前台启动并且向标准错误系统输出打印日志信息。 在实际应用里,postmaster应该作为后台进程启动,也许该在启动时。

一个postmaster总是管理来自同一个数据库集群的数据。 一个数据库集群是一套在同一个文件系统位置存放数据的数据库。 当 postmaster 启动时,它需要知道数据库集群文件("数据区")的位置。 这个参数是通过传递 -D 命令行选项或者 PGDATA 环境变量实现的,没有缺省值。 一个系统上同时可以运行几个postmaster进程, 只要他们使用不同的数据区和不同的端口号(见下文)。 一个数据区是用 initdb 创建的。

选项

postmaster 接受下列命令行参数。 关于这些选项的更详细的讨论请参考 Section 16.4。 你也可以通过设置一个配置文件来减少敲击这些选项。

-A 0|1

打开运行时断言检查,是检测编程错误的调试帮助。 只有在编译时打开了它,你才能使用它。如果编译时打开了,缺省是打开。

-B nbuffers

为服务器进程分配和管理的共享内存缓冲区数量。此值缺省为 64 个缓冲区,每个缓冲区是 8k 字节。

-c name=value

设置一个命名的运行时参数。参考 Section 16.4 获取列表和描述。 大多数其他命令行选项实际上都是这样的参数赋值的短形式。 -c 可以出现多次用以设置多个参数。

-d debug-level

设置调试级别。数值越高,写到服务器日志的调试输出越多。 数值范围是 1 到 5。

-D datadir

声明数据目录的文件系统路径。参阅上文的讨论。

-F

关闭 fsync 调用,提高性能,但是要冒系统崩溃时数据毁坏的风险。 这个选项对应于在 postgresql.conf 中设置 fsync=false。在使用之前阅读详细文档!

--fsync=true 有着这个选项的反面效果。

-h hostname

声明 postmaster 侦听着等待来自前端应用联接的 TCP 主机名或地址。 它缺省侦听所有配置了的地址(包括 localhost)。

-i

这个选项打开 TCP/IP (网际域套接字)通讯。 没有这个选项,只能进行本地 Unix 域套接字通讯。 这个选项等效于在 postgresql.conf 中设置 tcpip-socket=true

--tcpip_socket=false 是这个选项的相反的作用。

-k directory

声明 postmaster 侦听着等待来自前端应用联接的 Unix 域套接字的位置。 缺省通常是 /tmp,但是可以在制作的时候修改。

-l

这个选项打开用 SSL 进行的安全通讯。同样还需要 -i 选项。要使用这个选项,编译时你必须打开了 SSL 选项。

-N max-connections

设置postmaster允许启动的服务器服务器的最大数目。缺省配置时,该值为 32, 如果你的系统能支持更多进程,该值最大可以设置为你的系统所能支持的极限。 时修改(参阅 src/include/config.h)。 (请注意-B选项要求至少是两倍-N参阅 Section 16.5 获取有关大客户量的系统资源需求。)

-o extra-options

extra-options 里声明的 postgres 选项都传递给所有由这个 postmaster 启动的服务进程。 参阅 postgres 获取可能选项。 如果选项字串包含任何空白,整个字串必须引起来。

-p port

声明 postmaster 侦听着等待客户端应用连接的互联网 TCP/IP 端口或一个本地 Unix 域套接字文件扩展(描述符)。 缺省的端口号是环境变量 PGPORT 的值。如果没有设置 PGPORT 缺省是 PostgreSQL 编译时建立的值(通常是 5432)。 如果你声明了一个非缺省端口,那么所有前端应用(包括 psql)都必须用命令行选项或者 PGPORT 声明同一个端口。

-S

指明 postmaster 进程将以安静模式启动。也就是说, 它将与用户的(控制)tty 脱离并且启动其自身的进程组。 并且它把标准输出和标准错误重定向到 /dev/null

使用这个开关会将日志输出都丢弃,可能不是你希望的, 因为这样令错误查找非常困难。参阅下文获取一个在后台启动 postmaster 的更好的方法。

--silent_mode=false 的作用和这个选项的效果正好相反。

--name=value

设置一个命名的运行时参数;其缩写形式是 -c

有两个额外的命令行选项可以用于调试导致服务器异常退出。 用于这种状况的一般策略是通知所有其它服务器必须退出, 然后重新初始化共享内存和信号灯。这是因为一个出错的服务器在退出前可能已经破坏了一些共享的状态。 这些选项控制这种环境下的 postmaster 的性质,而且没有哪个选项是为普通操作准备的

这些特殊选项是:

-n

postmaster 将不会重新初始化共享数据结构。 一个有经验的系统程序员这时就可以使用调试器检查共享内存和信号灯状态。

-s

postmaster 将通过发送信号SIGSTOP 停止所有其他服务器进程,但不会导致它们退出。 这样就允许系统程序员手工从所有服务器进程收集倾倒的核心(core dumps)。

环境

PGCLIENTENCODING

客户端使用的确缺省字符编码。(客户端可以独立地覆盖这个。)这个值也可以在配置文件里设置。

PGDATA

缺省数据目录位置

PGDATESTYLE

运行时参数datestyle的缺省值。(已经不再鼓励使用环境变量了。)

PGPORT

缺省端口(最好再配置文件中设置)

TZ

服务器时区

其它

其它环境变量可以用于指定可选地数据存储位置。参阅 Section 18.5 获取更多信息。

诊断

一个提到了 semget 或者 shmget 的错误信息可能意味着你需要配置你的内核, 提供足够的共享内存和信号灯。更多讨论,参阅 Section 16.5

提示: 你也可以通过降低 shared_buffers 的参数以减少 PostgreSQL的共享内存的消耗, 或者降低max_connections的参数减少PostgreSQL的信号灯的消耗, 以此可以推迟重新配置内核。

如果是一个说另外一个 postmaster 正在运行的错误信息,那你应该确保没有其他的 postmaster 进程正在运行。判断这个情况的最简单的办法是使用命令

$ ps ax | grep postmaster

或者

$ ps -e | grep postmaster

具体使用哪种取决于你的系统。如果确信没有冲突的 postmaster 在运行,那么你可以删除消息里提到的锁文件然后再次运行。

一个说无法绑定端口的错误信息可能表明该端口已经背其它非 PostgreSQL 进程使用。 如果你终止postmaster后又马上用同一个端口运行它,你也有可能得到这个错误信息; 这时,你必须多等几秒,等操作系统关闭了该端口后再试。 最后,如果你使用了一个操作系统认为是保留的端口,也可能导致这个错误信息。 例如,我的 Unix 版本认为低于 1024 的端口号是"可信任的",因而只有 Unix 超级用户可以使用它们。

注意

如果有可能,不要使用 SIGKILL杀死 postmaster。 这样会阻止 postmaster在退出前释放它持有的系统资源(例如共享内存和信号灯)。

要正常结束 postmaster,可以使用信号 SIGTERMSIGINT, 或 SIGQUIT。 第一个信号将等待所有的客户端退出后才退出。 第二个将强制断开所有客户端,而第三个将不停止立刻退出, 导致在重起时的恢复运行。

工具命令 pg_ctl 可以用于安全而有效地启停 postmaster

--FreeBSD或者 OpenBSD上无法运行。 应该用 -c。这在受影响的系统里是个臭虫; 如果这个毛病没有修补好,将来的 PostgreSQL 版本将提供一个绕开的办法。

例子

用缺省值在后台启动postmaster,键入:

$ nohup postmaster >logfile 2>&1 </dev/null &

以指定的端口启动 postmaster

$ postmaster -p 1234

这条命令将在端口 1234 启动 postmaster。 为了用psql与这个 postmaster 联接, 你应该这么运行psql

$ psql -p 1234

或者设置环境变量 PGPORT

$ export PGPORT=1234
$ psql

命名的运行时参数可以用下列的风格之一设置:

$ postmaster -c sort_mem=1234
$ postmaster --sort-mem=1234

两种形式都覆盖那些现有的在 postgresql.conf 里面的 sort_mem 的设置。 请注意在参数名里的下划线在命令行上可以写成下划线,也可以写成划线。

提示: 除了用于短期的实验以外,更好的习惯是编辑放在 postgresql.conf 里面的设置, 而不是倚赖命令行开关设置参数。

又见

initdb, pg_ctl