↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本PostgreSQL 7.4 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

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 是一个用于启动、 停止或重启 PostgreSQL 后端服务器(postmaster),或者显示 一个运行中服务器的状态的工具。虽然服务器可以手动 启动,但 pg_ctl 封装了诸如 重定向日志输出以及恰当地从终端和进程组脱离这样的 任务。它还为受控关闭提供了方便的选项。

在 start 模式中,会启动一个新的服务器。 服务器在后台启动,标准输入被连接到 /dev/null。标准输出和标准 错误要么被追加到一个日志文件(如果使用了 -l 选项),要么被重定向到 pg_ctl 的 标准输出(不是标准错误)。如果没有选择日志文件, pg_ctl 的标准输出应当被重定向 到一个文件或者通过管道传给另一个进程(例如一个日志轮转程序), 否则 postmaster 会把它的输出写到控制 终端(从后台)并且不会脱离 shell 的 进程组。

在 stop 模式中,运行在指定数据目录中的服务器会被关闭。用 -m 选项可以选择三种不同的关闭方法:“智能”(Smart)模式等待所有客户端 断开连接。这是默认方式。“快速”(Fast)模式不 等待客户端断开连接。所有活动事务都会被 回滚并且客户端被强制断开连接,然后 服务器被关闭。“立即”(Immediate)模式将在不做干净关闭的情况下中止 所有服务器进程。这会导致 重启时运行一次恢复。

restart 模式实际上是先执行一次停止再执行一次 启动。这允许更改 postmaster 的命令行选项。

reload 模式只是向 postmaster 进程发送一个 SIGHUP 信号,使它重新读取它的配置文件 (postgresql.conf、 pg_hba.conf 等)。这允许更改那些 不需要完全重启就能 生效的配置文件选项。

status 模式检查在指定数据目录中是否有一个服务器 正在运行。如果有,就显示它的 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 秒。这是关闭的默认方式。成功的 关闭以 PID 文件的消失为标志。对于启动,一次成功的 psql -l 表示成功。pg_ctl 会尝试为 psql 使用正确的端口。如果环境变量 PGPORT 存在,就使用它。否则,它会看 postgresql.conf 文件中是否设置了端口。 如果两者都没有用上,它将使用 PostgreSQL 编译时的默认端口 (默认为 5432)。

-W

不等待启动或关闭完成。这是 启动和重启的默认方式。

环境

PGDATA

默认数据目录位置。

PGPORT

psql 的默认端口(由 -w 选项使用)。

其他环境变量见 postmaster。

文件

postmaster.pid

该文件在数据目录中的存在被用来帮助 pg_ctl 判断服务器当前 是否在运行。

postmaster.opts.default

如果该文件存在于数据目录中, pg_ctl(在 start 模式中)会把该文件的内容作为选项传递给 postmaster 命令,除非被 -o 选项覆盖。

postmaster.opts

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

postgresql.conf

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

注意

等待完全启动不是一个定义良好的操作,如果访问控制的设置使得本地客户端不手动交互就无法连接(例如口令认证),它可能会失败。

示例

启动服务器

启动一个服务器:

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

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

另见

postmaster

提交更正

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