PostgreSQL 8.2.3 中文文档
后退快退快进前进

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 kill [signal_name] [process_id]
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
pg_ctl unregister [-N servicename]

描述

pg_ctl 用于启动、停止、重启 PostgreSQL 后端服务器(postgres),或者显示一个运行着的服务器的状态。尽管可以手动启动服务器,但是 pg_ctl 封装了重新定向日志输出,与终端和进程组合理分离,以及另外提供了一个选项用于有控制的关闭。

start 模式里会启动一个新的服务器。服务器是在后台启动的,标准输入被附着到了 /dev/null 上。如果使用了 -l ,那么标准输出和标准错误将被定向到一个日志文件,要么就是重定向到 pg_ctl 的标准输出(而不是标准错误)。如果没有选定日志文件,pg_ctl 的标准输出应该重定向到一个文件或者用管道输出到类似 rotatelogs 这样的日志滚动程序,否则,postgres 将把它的输出写到控制终端(在后台)并且将不会脱离 shell 的进程组。

stop 模式下,那个正在特定数据目录运行的服务器将被关闭。你可以用 -m 选项选择三种不同的关闭模式:"Smart"模式等待所有客户端中断连接,这是缺省。"Fast"模式并不等待客户端中断连接,所有活跃事务都被回滚并且客户端都被强制断开。"Immediate"模式将在没有干净关闭的情况下强行退出。这么做将导致在重新启动的时候的恢复。

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

reload 模式简单地给 postgres 发送一个 SIGHUP 信号,导致它重新读取配置文件(postgresql.conf, pg_hba.conf 等),这样就允许修改配置文件选项而不用重启系统即可生效。

status 模式监查一个服务器是否在指定的数据目录运行,如果是,那么显示其 PID 和调用它的命令行选项。

kill 模式允许你给一个指定的进程发送信号。这个功能对 Microsoft Windows 特别有用,因为它没有 kill 命令。使用 --help 查看支持的信号名字列表。

register 模式允许你在 Microsoft Windows 上注册一个系统服务。

unregister 模式允许你在 Microsoft Windows 上删除先前用 register 命令注册的系统服务。

选项

-D datadir

声明该数据库的文件系统位置。如果忽略则使用 PGDATA 环境变量。

-l filename

把服务器日志输出附加在 filename 文件上。如果该文件不存在则创建它。umask 设置为 077 ,因此缺省时是不允许从其它用户向日志文件访问的。

-m mode

声明关闭模式。mode 可以是 smart, fast, immediate 之一,或者是这三个的首字母之一。

-o options

声明要直接传递给 postgres 的选项。

参数通常都用单或者双引号包围以保证它们作为一个整体传递。

-p path

声明 postgres 可执行文件的位置。缺省位于 pg_ctl 自身所在目录,如果没找到则使用硬编码的安装目录。除非你想干点什么特别的事情,并且想得到类似没有找到 postgres 这样的错误,否则必须使用这个选项。

-s

只打印错误,而不打印提示性信息。

-w

等待启动或者关闭的完成(60 秒超时),这个参数是关闭时的缺省值。成功的关闭是以删除 PID 文件为标志的。对于启动而言,一次成功的 psql -l 就标志着成功。pg_ctl 将企图使用对 psql 合适的端口,如果存在 PGPORT 环境变量,那么将用它。否则,它将查找在 postgresql.conf 文件里是否设置了一个端口。如果都没有,它将使用 PostgreSQL 编译时的缺省端口(缺省 5432)。在等待的时候,pg_ctl 将根据启动或者关闭的成功状况返回一个准确的退出代码。

-W

不等待启动或者停止的完成。这是启动和重启的缺省。

Windows 选项

-N servicename

要注册的系统服务的名字。这个名字将用于服务名和显示名。

-P password

用户启动服务的口令

-U username

用于启动服务的用户的用户名。对于域用户,使用 DOMAIN\username 格式。

环境变量

PGDATA

缺省数据目录位置

PGPORT

psql 的缺省端口(由 -w 选项使用)。

其它的环境变量请参阅 postgres

文件

postmaster.pid

这个文件存在于数据目录中是为了帮助 pg_ctl 判断服务器当前是否在运行。

postmaster.opts.default

如果这个文件存在于数据目录,pg_ctl (在 start 模式下)将把文件地内容当作传递给 postgres 命令的选项传递过去,除非被 -o 选项覆盖。

postmaster.opts

如果这个文件存在于数据目录,pg_ctl (在 start 模式下)将把文件地内容当作传递给 postgres 命令的选项传递过去,除非被 -o 选项覆盖。这个文件的内容也会在 status 模式里显示出来。

postgresql.conf

这个文件在数据目录中,会分析它以查找和 psql 一起用的合适的端口(在 start 模式里给出 -w 的时候)。

注意

等待完全启动还不是一个定义得很完整的操作,如果访问控制设置为本地客户端在没有手工交互的情况下不能访问的话还可能会失效(比如口令认证)。

例子

启动服务器

启动服务器:

$ 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 status
pg_ctl: server is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'

这就是在 restart 模式中被调用的命令行。

又见

postgres


后退首页前进
pg_controldata上一级pg_resetxlog