pg_ctl

Name

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” 模式将在没有完全 关闭的情况下退出.这么做将导致在重新启动的时候的恢复. 缺省时,停止模式等待关闭动作的完成.

restart 实际上是先执行一个停止,然后紧跟一个 启动.它允许变换 postmaster 命令行的选项.

status 模式监查一个 postmaster 是否在运行, 如果是,那么显示其 PID 和调用它的命令行选项.

选项

-D datadir

声明该数据库文件的文件系统位置. 如果忽略这个选项,使用环境变量 PGDATA

-l filename

把服务器日志输出附加在 filename 文件上. 如果该文件不存在,那么创建它.掩码设置为 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

用于一个 postmaster 使用端口 5433,而且不带 fsync 运行,使用:

$ pg_ctl -o "-F -p 5433" start

停止 postmaster

$ pg_ctl stop
停止 postmaster,使用 -m 开关允许我们控制 如何把后端停下来.-w 等待 postmaster 停止.-m 声明后端的停止模式.

重起 postmaster

这个命令几乎等于先停止 postmaster 然后再启动她,只不过 pg_ctl 保存并重新使用上一次运行 postmaster 的 命令行参数. 重起 postmaster 的最简单的方法是:

$ pg_ctl restart

重起 postmaster, 等待其停止和重起:

$ pg_ctl -w restart

使用 5433 重起并且重起后关闭 fsync:

$ pg_ctl -o "-F -p 5433" restart

显示 postmaster 状态

下面是来自pg_ctl 的状态输出的例子:

$ pg_ctl status
pg_ctl: postmaster is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postmaster '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'
这是在重起模式里使用的命令行.

虫子

等待启动的完成这个概念定义得还不那么完善,如果你设置了 只能手工联接的访问控制,那么它可能会失效. 我们应该避免这样的情况.

又见

, PostgreSQL 管理员手册