选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

pg_ctl

pg_ctl — initialize, start, stop, or restart a PostgreSQL server

大纲

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] [-s] [-o options]

pg_ctl unregister [-N servicename]

描述

pg_ctl是一个实用工具,用于初始化PostgreSQL数据库集簇,启动、停止或重启PostgreSQL数据库服务器(postgres),或者显示正在运行服务器的状态。虽然服务器也可以手工启动,但pg_ctl将重定向日志输出、正确地与终端和进程组脱离等任务封装了起来。它还提供了便于实施受控关闭的选项。

initinitdb模式会创建一个新的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.confpg_hba.conf等)。这样就可以修改那些无需完全重启服务器即可生效的配置文件选项。

status 模式检查在指定数据目录中是否有一个服务器正在运行。如果有,将显示它的 PID 以及调用它时使用的命令行选项。

kill模式向指定进程发送信号。这在没有内置kill命令的Microsoft Windows上尤其有用。使用--help可查看受支持的信号名称列表。

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

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

选项

-c

在支持此功能的平台上,尝试通过解除对 core 文件的软资源限制,允许服务器崩溃时产生 core 文件。这在调试或诊断问题时很有用,因为可以从失败的服务器进程获得一个栈回溯。

-D datadir

指定数据库配置文件所在的文件系统位置。若省略此选项,则使用环境变量PGDATA

-l filename

将服务器日志输出追加到filename。如果该文件不存在,就会创建它。umask被设置为 077,因此默认情况下其他用户无法访问该日志文件。

-m mode

指定关闭模式。mode可以是smartfastimmediate,或者是这三者之一的首字母。

-o options

指定要直接传递给postgres命令的选项。

通常应将选项放在单引号或双引号中,以确保它们作为一个整体被传递。

-p path

指定postgres可执行程序的位置。默认情况下,postgres可执行程序取自与pg_ctl相同的目录;如果那里没有,则取自硬编码的安装目录。除非采用了某些非常规方式,并收到找不到postgres可执行程序的错误,否则通常不需要使用此选项。

init模式中,此选项同样指定initdb可执行程序的位置。

-s

Only print errors, no informational messages.

-t

等待启动或关闭完成时要等待的秒数。

-w

等待启动或关闭完成。默认的等待时间是 60 秒。这是关闭操作的默认选项。一次成功的关闭由PID文件的移除来指示。对于启动,一次成功的psql -l表示成功。pg_ctl会尝试为psql使用正确的端口。如果环境变量PGPORT存在,则使用它。否则,它会查看postgresql.conf文件中是否设置了一个端口。如果这两者都未被使用,它将使用PostgreSQL编译时的默认端口(默认是 5432)。等待时,pg_ctl会根据启动或关闭的成功与否返回准确的退出码。

-W

不等待启动或关闭完成。对 start 和 restart 模式来说,这是默认行为。

用于 Windows 的选项

-N servicename

要注册的系统服务名称。该名称会同时用作服务名和显示名。

-P password

用于启动该服务的用户密码。

-U username

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

环境

PGDATA

默认数据目录位置。

PGHOST

Default host name or Unix-domain socket location for psql (used by the -w option).

PGPORT

Default port number for psql (used by the -w option).

其他的服务器变量见postgres。这个工具与大多数其他PostgreSQL工具一样,也使用libpq支持的环境变量(见第 31.13 节)。

文件

postmaster.pid

数据目录中该文件的存在与否,用于帮助pg_ctl确定服务器当前是否正在运行。

postmaster.opts

如果该文件存在于数据目录中,pg_ctl(在restart模式下)会将该文件的内容作为选项传递给postgres,除非被-o选项覆盖。该文件的内容也会在status模式下显示出来。

postgresql.conf

数据目录中的这个文件会被解析,以便在start模式中给出-w时,找到与psql一起使用的正确端口。

Notes

等待完全启动并不是一个定义良好的操作,如果访问控制的设置使得本地客户端不经过手工交互(例如密码认证)就无法连接,它可能会失败。关于额外的连接变量,见第 31.13 节;关于密码,另见第 31.14 节

示例

启动服务器

要启动服务器:

$ pg_ctl start

一个启动服务器并阻塞到服务器启动完成的例子:

$ pg_ctl -w start

要使用端口 5433 启动服务器,并在未启用fsync的情况下运行,可使用:

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

停止服务器

$ pg_ctl stop

stops the server. Using the -m switch allows one to control how the backend shuts down.

重启服务器

重启服务器几乎等同于先停止服务器再重新启动,只不过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'

这是在重启模式中会被调用的命令行。

参见

initdb, postgres

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。