pg_ctl

Name

pg_ctl -- 初始化、启动、终止或者重启一个PostgreSQL服务器

Synopsis

pg_ctl init[db] [-s] [-D datadir] [-o options]

pg_ctl start [-w] [-t seconds] [-s] [-D datadir] [-l filename] [-o options] [-p path] [-c]

pg_ctl stop [-W] [-t seconds] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]

pg_ctl restart [-w] [-t seconds] [-s] [-D datadir] [-c] [-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] [-t seconds] [-o options]

pg_ctl unregister [-N servicename]

描述

pg_ctl 是一个实用程序,它初始化PostgreSQL 数据库集群,启动、终止或者重启PostgreSQL后台服务器 (postgres),或显示一个正在运行的服务器的状态。尽管服务器不能 手动启动,pg_ctl封装任务,如:重定向日志输出以及从终端和过程组 恰当拆分。它也为受控关闭提供了便捷选项。

init或者initdb模式创建了一个新的 PostgreSQL数据库集群。一个数据库集群式一组由单一服务器实例管理 的数据库的集合。该模式调用initdb命令。参阅 initdb获取详细信息。

start模式中,一个新服务器被启动。该服务器在后台启动,而标准输出 被连接到/dev/null(或者在Windows中是nul)。 在类Unix系统中,默认情况下,服务器的标准输出和标准错误被发送到pg_ctl 的标准输出中(而不是标准错误)。pg_ctl然后应该 被重定向到一个文件或输送到另一个进程(例如像rotatelogs的日志旋转程序); 否则,postgres会将输出写到控制终端(从后台),并且不离开shell的过程组。 在Windows中,缺省时服务器的标准输出和标准错误会被发送到终端。可以通过使用-l 附加服务器输出到日志文件来改变这些默认行为。

stop模式中,在特定数据目录下运行的服务器是关闭的。三种不同的关闭方法 可以用-m选择:"Smart"模式等待在线备份模式完成并断开所有的 客户端连接。这是默认的。如果服务器是在恢复,一旦所有客户端断开了那么恢复和流式复制将会中断。 "Fast"模式不等待客户端断开连接并将终止一个进行中的在线备份。回滚所有活动事务 并强制断开客户端连接,然后服务器就会关闭。"Immediate"模式将会在不完全关闭的情况下 中止所有服务器进程。这会导致在重启时运行一个恢复。

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

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

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

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

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

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

选项

-c

通过提高强加于服务器的任何软资源限制,尝试允许服务器故障在其可用的平台上产生核心文件。 这在调试和诊断问题方面也是有效的,通过允许从一个失败的服务器进程获得一个堆栈跟踪。

-D datadir

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

-l filename

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

-m mode

Specifies the shutdown mode. mode can be smart, fast, or immediate, or the first letter of one of these three. 声明关闭模式。mode可以是 smart,fast,immediate之一, 或者是这三个的首字母之一。

-o options

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

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

-p path

指定postgres可执行文件的位置。缺省时postgres 可执行文件来自和pg_ctl一样的相同目录,或者如果该目录失败,则是 硬连线安装目录。不必使用该选项,除非你在做一些不同寻常的操作或者得到postgres 执行文件找不到的错误。

init模式中,该选项类似地指定initdb 可执行文件的位置。

-s

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

-t

等待启动或者关机完成的等待秒数。

-w

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

-W

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

Options for Windows

-N servicename

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

-P password

用户启动服务的口令

-U username

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

环境

PGDATA

缺省数据目录位置

PGHOST

默认的主机名或者psql的unix域套接字的位置(-w选项所使用的)。

PGPORT

psql的默认端口号(psql选项所使用的)。

对于额外的服务器变量,请参阅postgres。该实用程序,跟大部分其他 PostgreSQL实用程序一样,也是用libpq支持的环境变量。 (请参阅Section 31.13)。

文件

postmaster.pid

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

postmaster.opts

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

postgresql.conf

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

注意

等待完整的启动并不是一个定义明确的操作,并且如果访问控制已设置可能或失败, 因此一个本地客户端不能在没有手动交互时连接(例如:密码身份认证)。 对于额外的连接变量,请参阅Section 31.13,并且对于秘密, 也参阅Section 31.14

示例

启动服务

启动服务器:

$ 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 模式中被调用的命令行。

又见

initdb, postgres