pg_ctl
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 是一个用于启动、停止或重启postmaster,即 PostgreSQL 后端服务器,或者显示一个运行中 postmaster 的状态的工具。虽然 postmaster 可以手动启动,但 pg_ctl 封装了诸如重定向日志输出、恰当地从终端和进程组脱离这样的任务,并且它为受控关闭提供了方便的选项。
在 start 模式中,会启动一个新的 postmaster。服务器在后台启动,标准输入被连接到
/dev/null。标准输出和标准错误要么被追加到一个日志文件(如果使用了 -l
选项),要么被重定向到 pg_ctl 的标准输出(不是标准错误)。如果没有选择日志文件,
pg_ctl 的标准输出应当被重定向到一个文件或者通过管道传给另一个进程(例如一个日志轮转程序),否则 postmaster 会把它的输出写到控制终端(从后台)并且不会脱离 shell 的进程组。
在 stop 模式中,运行在指定数据目录中的 postmaster 会被关闭。用
-m
选项可以选择三种不同的关闭方法:“智能”(Smart)模式等待所有客户端断开连接。这是默认方式。“快速”(Fast)模式不等待客户端断开连接。所有活动事务都会被回滚并且客户端被强制断开连接,然后数据库被关闭。“立即”(Immediate)模式将在不做干净关闭的情况下中止所有服务器进程。这会导致重启时运行一次恢复。
restart 模式实际上是先执行一次停止再执行一次启动。这允许更改 postmaster 的命令行选项。
reload 模式只是向 postmaster 发送一个 SIGHUP 信号,使它重新读取它的配置文件(postgresql.conf、pg_hba.conf、等)。这允许更改那些不需要完全重启就能生效的配置文件选项。
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 的错误。- -s
只打印错误,不打印信息性消息。
- -w
等待启动或关闭完成。超时时间为 60 秒。这是关闭的默认方式。
- -W
不等待启动或关闭完成。这是启动和重启的默认方式。
文件
如果文件 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 管理员指南