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进程。数据区域是用initdb创建的。
当 postmaster启动时,它需要知道数据区域的位置。该位置必须通过 -D选项或PGDATA环境变量指定;没有默认值。通常,-D或 PGDATA会直接指向由initdb创建的数据区域目录。其他可能的文件布局见 第 16.4.1 节。
postmaster接受以下命令行参数。有关这些选项的详细讨论,请参阅第 16.4 节。通过设置配置文件,你也可以省去键入其中大多数选项的麻烦。
-A 0|1启用运行时断言检查,这是一种帮助检测编程错误的调试辅助手段。只有在编译 PostgreSQL 时启用了断言,此选项才可用;如果是这样,默认值为开。
-B nbuffers设置供服务器进程使用的共享缓冲区数量。该参数的默认值由initdb自动选择;更多信息参见第 16.4.3.1 节。
-c name=value设置一个命名的运行时参数。PostgreSQL支持的配置参数见 第 16.4 节。大多数其他命令行选项实际上都是这种参数赋值的简写形式。-c可以出现多次 以设置多个参数。
-d debug-level设置调试级别。该值设得越高,写入服务器日志的调试输出就越多。取值范围是 1 到 5。
-D datadir指定数据目录或配置文件的文件系统位置。详见 第 16.4.1 节。
-F禁用fsync调用以提高性能,但在系统崩溃时会有数据损坏的风险。指定此选项等效于 禁用fsync配置 参数。使用前请先阅读详细文档!
--fsync=true与该选项的效果相反。
-h hostname指定postmaster用来侦听来自客户端应用的 TCP/IP 连接的 IP 主机名或地址。该值也可以是逗号分隔的地址列表,或者用*指定侦听所有可用接口。空值 表示不侦听任何 IP 地址,在这种情况下 只能使用 Unix 域套接字连接到该 postmaster。默认只侦听 localhost。 指定此选项等效于设置listen_addresses配置参数。
-i允许远程客户端通过 TCP/IP(Internet 域) 连接。没有此选项时,只接受本地连接。 该选项等效于在 postgresql.conf中,或通过-h将 listen_addresses设置为*。
该选项已被弃用,因为它无法访问 listen_addresses的全部功能。 通常最好直接设置listen_addresses。
-k directory指定 postmaster 监听来自客户端应用连接的 Unix 域套接字的目录。默认通常是 /tmp,但可以在构建时更改。
-l启用使用SSL的安全连接。 若要使用此选项,PostgreSQL必须在编译时启用 SSL支持。关于使用SSL的更多信息, 请参阅第 16.8 节。
-N max-connections设置该postmaster将接受的最大客户端连接数。默认值为 32,但可以设置为你系统所支持的最高值。(注意-B必须至少是-N的两倍。关于大量客户端连接的系统资源需求的讨论,参见第 16.5 节。)指定此选项等效于设置 max_connections配置参数。
-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服务器时区。
提到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 work_mem=1234$postmaster --work-mem=1234
两种形式都会覆盖 postgresql.conf中可能存在的 work_mem设置。请注意, 参数名中的下划线在命令行中既可以写成下划线, 也可以写成连字符。
除了短期实验之外, 与其依赖命令行开关来设置参数, 通常更好的做法是直接编辑 postgresql.conf中的设置。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。