pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
postmaster — PostgreSQL多用户数据库服务器
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]]
postmaster是PostgreSQL多用户数据库服务器。客户端应用要访问数据库时,会(通过网络或本地)连接到一个正在运行的 postmaster。该 postmaster随后会启动一个独立的服务器进程(“postgres”)来处理该连接。 postmaster还负责管理各服务器进程之间的通信。
默认情况下,postmaster在前台启动,并将日志消息打印到标准错误流。在实际应用中,postmaster 应作为后台进程启动,例如在系统启动时启动。
一个 postmaster 总是恰好管理一个 数据库集群的数据。数据库集群是存储在公共文件系统 位置上的一组数据库的集合。postmaster 启动时需要知道 数据库集群文件(“数据区”)的位置。这 通过 -D 调用选项或 PGDATA 环境变量完成;没有默认值。 一个系统上可以同时运行多个 postmaster 进程, 只要它们使用不同的数据区和不同的 通信端口(见下文)。数据区用 initdb 创建。
postmaster 接受下列 命令行参数。关于这些选项的详细讨论请 查阅 第 16.4 节。通过设置配置文件, 大多数这样的选项还可以省去重复输入。
-A 0|1启用运行时断言检查,这是一种检测 编程错误的调试辅助手段。只有在编译时 启用了它才可用。如果是这样,默认为开启。
-B nbuffers设置服务器进程使用的共享缓冲区 数量。该值默认为 64 个缓冲区,每个 缓冲区为 8 kB。
-c name=value设置一个命名的运行时参数。列表和描述请 查阅 第 16.4 节。大多数其他命令行 选项实际上是这种参数赋值 的简短形式。-c 可以出现多次以设置 多个参数。
-d debug-level设置调试级别。该值设得越高,写入服务器日志的调试输出就越多。取值范围是 1 到 5。
-D datadir指定数据目录的文件系统位置。见 上面的讨论。
-F为了改进性能而禁用 fsync 调用, 代价是系统崩溃时可能发生数据损坏。这个 选项对应于在 postgresql.conf 中设置 fsync=false。使用前请阅读 详细的文档!
--fsync=true 的效果与此选项 相反。
-h hostname指定 postmaster 用来监听 客户端应用连接的 IP 主机名或地址。默认 监听所有已配置的地址(包括 localhost)。
-i允许客户端通过 TCP/IP(Internet 域)连接。 不使用这个选项时,只接受本地 Unix 域 套接字连接。这个选项对应于在 postgresql.conf 中设置 tcpip_socket=true。
--tcpip-socket=false 的效果与此选项 相反。
-k directory指定 postmaster 监听来自客户端应用连接的 Unix 域套接字的目录。默认通常是 /tmp,但可以在构建时更改。
-l启用使用 SSL 的安全连接。还需要 -i 选项。你必须以启用 SSL 的方式编译才能使用这个选项。
-N max-connections设置这个 postmaster 可接受的 最大客户端连接数。默认 值为 32,但可以设置到你的系统 所支持的程度。(注意 -B 至少要为 -N 的两倍。关于大量客户端 连接的系统资源需求的讨论见 第 16.5 节。)
-o extra-options在extra-options中指定的命令行形式选项,会传给由这个 postmaster启动的所有服务器进程。可能的选项见postgres。如果选项字符串中包含空格,整个字符串必须加引号。
-p port指定postmaster 用来侦听客户端应用连接的 TCP/IP 端口或本地 Unix 域套接字文件扩展名。 默认值取自PGPORT环境 变量;如果PGPORT未设置,则 默认值就是在编译期间确定的值(通常 为 5432)。如果你指定了非默认端口, 那么所有客户端应用都必须通过 命令行选项或PGPORT指定相同的端口。
-S指定postmaster 进程应以静默模式启动。也就是说,它将脱离用户的(控制)终端,启动自己的进程组,并把标准输出和标准错误重定向到/dev/null。
使用该开关会丢弃所有日志输出,这 很可能不是你想要的,因为它会使问题排查变得非常困难。在后台启动 postmaster的更好方法见下文。
--silent-mode=false与该选项的效果相反。
--name=value设置一个命名的运行时参数;这是-c的较短形式。
还有两个附加的命令行选项可用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程必须终止,然后重新初始化共享内存和信号量。这是因为出错的服务器进程可能在终止前破坏了某些共享状态。这些选项用来选择 postmaster在这种情况下的一些替代行为。 这两个选项都不适用于普通操作。
这些特殊情况选项是:
-npostmaster 将不重新初始化共享数据结构。经验丰富的系统程序员随后可以使用调试器检查共享内存和信号量的状态。
-spostmaster 将通过发送SIGSTOP信号暂停所有其他服务器进程, 但不使它们终止。这允许系统程序员手工收集所有服务器进程的核心转储。
PGCLIENTENCODING客户端使用的默认字符编码。(客户端可以单独覆盖它。) 该值也可以在配置文件中设置。
PGDATA默认的数据目录位置
PGDATESTYLEDATESTYLE 运行时参数的 默认值。(不推荐使用这个环境变量。)
PGPORT默认端口(最好在配置文件中设置)
TZ服务器时区。
其他环境变量可用来指定备选的 数据存储位置。更多信息 见 第 18.5 节。
提到semget或 shmget的失败消息,很可能表明你需要配置内核,以提供足够的共享内存和信号量。更多讨论见第 16.5 节。
通过减小 shared_buffers 来降低 PostgreSQL 的共享内存消耗, 和/或减小 max_connections 来降低 信号量消耗,你可能可以推迟重新配置内核。
表明另一个 postmaster 已经在运行的失败消息 应仔细检查,例如可根据你的系统使用下面的命令:
$ps ax | grep postmaster
或
$ps -ef | grep postmaster
如果你确信没有冲突的 postmaster 在运行,可以删除消息中提到的锁文件,然后重试。
指示无法绑定到某个端口的失败消息可能表示 该端口已被某个非 PostgreSQL 进程占用。 如果你终止了 postmaster 然后立即用同一端口重启,也可能 得到这个错误;这种情况下,只需 等待几秒直到操作系统关闭该端口 再重试。最后,如果你指定的 端口号被操作系统视为保留端口,也可能 得到这个错误。例如,许多版本的 Unix 认为 1024 以下的 端口号是“受信任的”, 只允许 Unix 超级用户访问它们。
只要有可能,就不要使用 SIGKILL杀死 postmaster。这样会阻止 postmaster在终止前释放其持有的系统 资源(例如共享内存和信号量)。这可能会导致 新的postmaster实例在启动时出现问题。
要正常终止postmaster,可以使用 SIGTERM、SIGINT或 SIGQUIT信号。第一个会在退出前等待 所有客户端终止,第二个会 强制断开所有客户端,而第三个会在不进行正确关闭的情况下立即退出, 从而在重启期间导致一次恢复运行。SIGHUP信号会 重新加载服务器配置文件。
实用命令pg_ctl可用于 安全、便捷地启动和关闭postmaster。
--选项在FreeBSD或OpenBSD上不起作用。 请改用-c。这是受影响操作系统中的一个缺陷;如果这个问题未被修复,未来版本的PostgreSQL 将提供变通方案。
要使用默认值在后台启动postmaster, 输入:
$nohup postmaster >logfile 2>&1 </dev/null &
要用特定端口启动 postmaster:
$postmaster -p 1234
这条命令将启动 postmaster 并通过端口 1234 通信。为了用 psql 连接这个 postmaster,你需要将它作为
$psql -p 1234
来运行,或者设置环境变量 PGPORT:
$export PGPORT=1234$psql
命名的运行时参数可以用下面两种风格中的任一种设置:
$postmaster -c sort_mem=1234$postmaster --sort-mem=1234
这两种形式都会覆盖 postgresql.conf 中可能存在的 SORT_MEM 设置。注意,命令行上参数名中的下划线 既可以写成下划线也可以写成短横线。
除了短期实验之外, 与其依赖命令行开关来设置参数, 通常更好的做法是直接编辑 postgresql.conf中的设置。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。