pg_ctl
pg_ctl — 启动、停止或重启 postmaster
大纲
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 status [-D datadir]
描述
pg_ctl 是一个用于启动、停止或重启postmaster,即 PostgreSQL 后端服务器,或者显示一个运行中 postmaster 的状态的工具。虽然 postmaster 可以手动启动,但 pg_ctl 封装了诸如重定向日志输出、恰当地从终端和进程组脱离这样的任务,此外还为受控关闭提供了一个选项。
在 start 模式中,会启动一个新的 postmaster。服务器在后台启动,标准输入被连接到
/dev/null。标准输出和标准错误要么被追加到一个日志文件(如果使用了 -l
选项),要么被重定向到 pg_ctl 的标准输出(不是标准错误)。如果没有选择日志文件,
pg_ctl 的标准输出应当被重定向到一个文件或者通过管道传给另一个进程(例如一个日志轮转程序),否则 postmaster 会把它的输出写到控制终端(从后台)并且不会脱离 shell 的进程组。
在 stop 模式中,运行在指定数据目录上的 postmaster 会被关闭。用
-m
选项可以选择三种不同的关闭方法:“智能”(Smart)模式等待所有客户端断开连接。这是默认方式。“快速”(Fast)模式不等待客户端断开连接。所有活动事务都将被回滚。“立即”(Immediate)模式将在不做完整关闭的情况下中止。这会导致重启时运行一次恢复。默认情况下,stop 模式会等待关闭完成。
restart 模式实际上是先执行一次停止再执行一次启动。这允许更改 postmaster 的命令行选项。
status 模式检查是否有一个 postmaster 正在运行,如果有就显示它的 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 的错误。- -w
等待启动或关闭完成。超时时间为 60 秒。这是关闭的默认方式。
- -W
不等待启动或关闭完成。这是启动和重启的默认方式。
- -s
只打印错误,不打印信息性消息。
文件
如果文件 postmaster.opts.default 存在于数据目录中,该文件的内容将被作为选项传递给 postmaster,除非被
-o 选项覆盖。
示例
启动 postmaster
启动 postmaster:
$pg_ctl start
一个启动 postmaster 并阻塞到 postmaster 起来的例子是:
$pg_ctl -w start
对于一个使用端口 5433 并且运行时不带 fsync 的 postmaster,使用:
$pg_ctl -o "-F -p 5433" start
停止 postmaster
$pg_ctl stop
停止 postmaster。使用 -m 开关可以控制后端如何关闭。
重启 postmaster
这几乎等价于停止 postmaster 然后再启动它,区别在于 pg_ctl 会保存并重用传递给先前运行实例的命令行选项。以最简单的形式重启 postmaster:
$pg_ctl restart
重启 postmaster 并等待它关闭再起来:
$pg_ctl -w restart
重启时使用端口 5433 并在重启后禁用 fsync:
$pg_ctl -o "-F -p 5433" restart
显示 postmaster 状态
下面是一段来自 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 模式中将会被调用的命令行。
缺陷
等待完全启动不是一个定义良好的操作,如果访问控制以使本地客户端不手动交互就无法连接的方式设置,它可能会失败。应当避免等待。
另见
postmaster、PostgreSQL 管理员指南