pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
pg_ctl — 启动、停止或重启一个 PostgreSQL 服务器
pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m [s[mart]] | [f[ast]] | [i[mmediate]] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m [s[mart]] | [f[ast]] | [i[mmediate]] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl 是一个用于启动、 停止或重启 PostgreSQL 后端服务器(postmaster),或者显示 一个运行中服务器的状态的工具。虽然服务器可以手动 启动,但 pg_ctl 封装了诸如 重定向日志输出以及恰当地从终端和进程组脱离这样的 任务。它还为受控关闭提供了方便的选项。
在 start 模式中,会启动一个新的服务器。 服务器在后台启动,标准输入被连接到 /dev/null。标准输出和标准 错误要么被追加到一个日志文件(如果使用了 -l 选项),要么被重定向到 pg_ctl 的 标准输出(不是标准错误)。如果没有选择日志文件, pg_ctl 的标准输出应当被重定向 到一个文件或者通过管道传给另一个进程(例如一个日志轮转程序), 否则 postmaster 会把它的输出写到控制 终端(从后台)并且不会脱离 shell 的 进程组。
在 stop 模式中,运行在指定数据目录中的服务器会被关闭。用 -m 选项可以选择三种不同的关闭方法:“智能”(Smart)模式等待所有客户端 断开连接。这是默认方式。“快速”(Fast)模式不 等待客户端断开连接。所有活动事务都会被 回滚并且客户端被强制断开连接,然后 服务器被关闭。“立即”(Immediate)模式将在不做干净关闭的情况下中止 所有服务器进程。这会导致 重启时运行一次恢复。
restart 模式实际上是先执行一次停止再执行一次 启动。这允许更改 postmaster 的命令行选项。
reload 模式只是向 postmaster 进程发送一个 SIGHUP 信号,使它重新读取它的配置文件 (postgresql.conf、 pg_hba.conf 等)。这允许更改那些 不需要完全重启就能 生效的配置文件选项。
status 模式检查在指定数据目录中是否有一个服务器 正在运行。如果有,就显示它的 PID 以及调用它时所用的命令行选项。
-D datadir指定数据库文件的文件系统位置。如果 省略它,就使用环境变量 PGDATA。
-l filename把服务器日志输出追加到 filename。如果该文件不 存在,则创建它。umask 被设置为 077,因此默认情况下禁止其他用户 访问该日志文件。
-m mode指定关闭模式。mode 可以是 smart、fast 或 immediate,或者是这三者之一的首字母。
-o options指定被直接传递给 postmaster 命令的选项。
这些选项通常用单引号或双引号包围,以确保它们 作为一组被传递。
-p path指定 postmaster 可执行文件的位置。默认情况下,postmaster 可执行文件取自与 pg_ctl 相同的目录,若失败则取写死的 安装目录。没有必要使用这个 选项,除非你在做某种不寻常的事情并且得到了找不到 postmaster 可执行文件的错误。
-s只打印错误,不打印信息性消息。
-w等待启动或关闭完成。超时时间为 60 秒。这是关闭的默认方式。成功的 关闭以 PID 文件的消失为标志。对于启动,一次成功的 psql -l 表示成功。pg_ctl 会尝试为 psql 使用正确的端口。如果环境变量 PGPORT 存在,就使用它。否则,它会看 postgresql.conf 文件中是否设置了端口。 如果两者都没有用上,它将使用 PostgreSQL 编译时的默认端口 (默认为 5432)。
-W不等待启动或关闭完成。这是 启动和重启的默认方式。
postmaster.pid该文件在数据目录中的存在被用来帮助 pg_ctl 判断服务器当前 是否在运行。
postmaster.opts.default如果该文件存在于数据目录中, pg_ctl(在 start 模式中)会把该文件的内容作为选项传递给 postmaster 命令,除非被 -o 选项覆盖。
postmaster.opts如果该文件存在于数据目录中, pg_ctl(在 restart 模式中) 会把该文件的内容作为选项传递给 postmaster,除非被 -o 选项覆盖。该文件的内容 也会在 status 模式中显示。
postgresql.conf当在 start 模式中给出 -w 时,会解析位于数据目录中的该文件,以找到与 psql 一起使用的正确端口。
等待完全启动不是一个定义良好的操作,如果访问控制的设置使得本地客户端不手动交互就无法连接(例如口令认证),它可能会失败。
启动一个服务器:
$pg_ctl start
一个启动服务器并阻塞到服务器 起来的例子是:
$pg_ctl -w start
对于一个使用端口 5433 并且 运行时不带 fsync 的服务器,使用:
$pg_ctl -o "-F -p 5433" start
$pg_ctl stop
停止服务器。使用 -m 开关可以 控制后端如何关闭。
重启服务器几乎等价于停止 服务器然后再启动它, 区别在于 pg_ctl 会保存并重用传递给先前运行实例的命令行选项。要以最简单的形式重启 服务器,使用:
$pg_ctl restart
重启服务器并 等待它关闭再起来:
$pg_ctl -w restart
重启时使用端口 5433 并在重启后禁用 fsync:
$pg_ctl -o "-F -p 5433" restart
下面是一段来自 pg_ctl 的状态输出示例:
$pg_ctl statuspg_ctl: postmaster is running (pid: 13718) Command line was: /usr/local/pgsql/bin/postmaster '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'
这是在 restart 模式中将会被调用的命令行。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。