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] [[-n] | [-s]]
postmaster 是 PostgreSQL 的多用户数据库服务器。 客户端应用要访问数据库,需要(通过网络或本地)连接到一个 运行中的 postmaster。 postmaster 随后启动一个单独的服务器 进程(“postgres”)来处理该 连接。postmaster 还 管理服务器进程之间的通信。
默认情况下 postmaster 在前台启动并把 日志消息打印到标准输出。在实际 应用中,postmaster 应作为后台进程启动,也许在系统引导时启动。
一个 postmaster 总是恰好管理一个 数据库集群的数据。数据库集群是存储在公共文件系统 位置上的一组数据库的集合。postmaster 启动时需要知道 数据库集群文件(“数据区”)的位置。这 通过 -D 调用选项或 PGDATA 环境变量完成;没有默认值。 一个系统上可以同时运行多个 postmaster 进程, 只要它们使用不同的数据区和不同的 通信端口(见下文)。数据区用 initdb 创建。
postmaster 接受下列 命令行参数。关于这些选项的详细讨论请 查阅 管理员指南。通过设置 配置文件,大多数这样的选项还可以省去重复输入。
启用运行时断言检查,这是一种检测 编程错误的调试辅助手段。只有在编译时 启用了它才可用。如果是这样,默认为开启。
nbuffers设置服务器进程使用的共享缓冲区 数量。该值默认为 64 个缓冲区,每个 缓冲区为 8 kB。
name=value设置一个命名的运行时参数。列表和描述请 查阅管理员指南。大多数其他 命令行选项实际上是这种参数赋值 的简短形式。
在某些系统上,还可以等价地使用 GNU 风格的长选项,形式为 --name=value。
debug-level设置调试级别。该值设置得越高,写入 服务器日志的调试输出就越多。默认为 0,表示不做调试。最高到 4 的值有意义。
datadir指定数据目录的文件系统位置。见 上面的讨论。
为了改进性能而禁用 fsync 调用, 代价是可能发生数据损坏。使用前请阅读 详细的文档!
hostname指定 postmaster 用来监听 客户端应用连接的 TCP/IP 主机名或地址。默认 监听所有已配置的地址(包括 localhost)。
允许客户端通过 TCP/IP(Internet 域)连接。 不使用这个选项时,只接受本地 Unix 域 套接字连接。
directory指定 postmaster 用来监听 客户端应用连接的 Unix 域套接字的目录。默认通常是 /tmp,但可以在构建时更改。
启用使用 SSL 的安全连接。还需要 -i 选项。你必须以启用 SSL 的方式编译才能使用这个选项。
max-connections设置这个 postmaster 可接受的 最大客户端连接数。默认 值为 32,但只要你的系统支持那么多进程, 最高可以设置为 1024。(注意 -B 至少要为 -N 的两倍。)
extra-options指定的命令行风格的选项(extra-options)会传递给该 postmaster 启动的 所有后端服务器进程。可能的选项见 postgres。如果选项 字符串包含空格,整个字符串必须加引号。
port指定 postmaster 用来监听客户端应用连接的 TCP/IP 端口或本地 Unix 域套接字文件扩展名。默认为 PGPORT 环境 变量的值,如果未设置 PGPORT, 则默认为编译时确定的值(通常为 5432)。如果你指定的不是默认端口, 所有客户端应用都必须用 命令行选项或 PGPORT 指定同一端口。
指定 postmaster 进程应以静默模式启动。也就是说,它将 与用户的(控制)终端脱离、建立自己的 进程组,并把标准输出和 标准错误重定向到 /dev/null。
使用这个开关会丢弃所有日志输出,这 很可能不是你想要的,因为它会使问题的 排查变得非常困难。在后台启动 postmaster 的更好方法见 下文。
还有两个额外的命令行选项可用于调试 导致后端异常死亡的问题。这些选项 控制 postmaster 在这种情况下 的行为,两个选项都不用于 日常操作。
这种情况下的常规策略是通知所有其他 后端必须终止,然后重新初始化共享 内存和信号量。这是因为出错的后端在 终止之前可能已经破坏了某些共享状态。
这些特殊情况的选项是:
postmaster 不会重新初始化共享数据结构。有经验的系统 程序员随后可以用调试器 检查共享内存和信号量状态。
postmaster 会通过发送信号 SIGSTOP 停止所有其他后端 进程,但不会使它们终止。这让系统程序员 可以手工收集所有后端进程的 core 转储。
semget: No space left on device如果你看到这条消息,应当运行 ipcclean 命令。之后再次尝试启动 postmaster。 如果仍然不行,你可能需要按安装 说明中的描述为共享内存和信号量配置 你的内核。如果你在单个主机上运行多个 postmaster 实例,或者内核的共享内存和/或信号量 限制特别小,就可能需要重新配置内核以增大 其共享内存或信号量参数。
通过减小 -B 来降低 Postgres 的共享内存消耗, 和/或减小 -N 来降低 Postgres 的信号量消耗, 你可能可以推迟重新配置内核。
StreamServerPort: cannot bind to port如果你看到这条消息,应当确保没有 其他 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。
要在后台使用默认值启动 postmaster,键入:
$nohup postmaster >logfile 2>&1 </dev/null &
要用特定端口启动 postmaster:
$postmaster -p 1234
这条命令将启动 postmaster 并通过端口 1234 通信。为了用 psql 连接这个 postmaster,你需要将它作为
$psql -p 1234
来运行,或者设置环境变量 PGPORT:
$export PGPORT=1234$psql
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。