PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

pg_ctl

pg_ctl — 初始化、启动、停止或控制一个 PostgreSQL 服务器

Synopsis

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

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

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

pg_ctl restart [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s] [-o options] [-c]

pg_ctl reload [-D datadir] [-s]

pg_ctl status [-D datadir]

pg_ctl promote [-D datadir] [-W] [-t seconds] [-s]

pg_ctl logrotate [-D datadir] [-s]

pg_ctl kill signal_name process_id

在 Microsoft Windows 上,还有:

pg_ctl register [-D datadir] [-N servicename] [-U username] [-P password] [-S a[uto] | d[emand] ] [-e source] [-W] [-t seconds] [-s] [-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 把服务器的输出追加到一个日志文件,从而改变这些默认行为。建议使用 -l 或者进行输出重定向。

stop 模式会关闭在指定数据目录中运行的服务器。可以使用 -m 选项选择三种不同的关闭方式。“智能”(smart)方式不允许建立新连接,然后等待所有现有客户端断开连接。如果服务器处于热备状态,那么一旦所有客户端都断开连接,恢复和流复制就会被终止。“快速”(fast)方式(默认)不会等待客户端断开连接。所有活动事务都被回滚,客户端被强制断开连接,然后服务器被关闭。“立即”(immediate)方式会立刻中止所有服务器进程,而不进行干净的关闭。这种选择会导致在下一次服务器启动时经历一个崩溃恢复周期。

restart 模式实际上会执行一次停止,然后再执行一次启动。这允许更改 postgres 的命令行选项,或者更改那些不重启服务器就无法改变的配置文件选项。如果在服务器启动时命令行中使用了相对路径,那么 restart 可能会失败,除非在与服务器启动时相同的当前目录中执行 pg_ctl。

reload 模式只是向 postgres 服务器进程发送一个 SIGHUP 信号,使其重新读取配置文件(postgresql.conf、pg_hba.conf 等)。这允许更改那些无需完全重启服务器即可生效的配置文件选项。

status 模式检查是否有服务器正在指定的数据目录中运行。如果是,则会显示服务器的 PID 以及调用它时所使用的命令行选项。如果服务器没有在运行,pg_ctl 会返回退出状态 3。如果没有指定可访问的数据目录,pg_ctl 会返回退出状态 4。

promote 模式指示在指定数据目录中运行的备用服务器结束备用模式并开始读写操作。

logrotate 模式会轮转服务器日志文件。有关如何在外部日志轮转工具中使用此模式的详细信息,请参见 Section 24.3。

kill 模式向指定的进程发送信号。这主要在 Microsoft Windows 上很有用,因为该系统没有内置的 kill 命令。使用 --help 可以查看受支持的信号名称列表。

register 模式将 PostgreSQL 服务器注册为 Microsoft Windows 上的系统服务。-S 选项允许选择服务的启动类型,即 “自动”(auto,在系统启动时自动启动服务)或 “按需”(demand,按需启动服务)。

unregister 模式在 Microsoft Windows 上注销一个系统服务。这会撤销 register 命令的效果。

选项

-c
--core-files

在可能的平台上,通过解除对核心文件施加的任何软资源限制,尝试允许服务器在崩溃时生成核心文件。这允许从失败的服务器进程获取堆栈跟踪,因此对调试或诊断问题很有用。

-D datadir
--pgdata=datadir

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

-l filename
--log=filename

把服务器日志输出追加到 filename。如果该文件不存在,则创建它。默认情况下,只有集群所有者可以访问该日志文件。如果在集群中启用了组访问,那么与集群所有者同组的用户也可以读取它。

-m mode
--mode=mode

指定关闭方式。mode 可以是 smart、fast 或 immediate,也可以是这三者之一的首字母。如果省略此选项,默认为 fast。

-o options
--options=options

指定要直接传递给 postgres 命令的选项。-o 可以被多次指定,所有给定的选项都会被传递下去。

options 通常应该用单引号或双引号括起来,以确保它们作为一个整体被传递。

-o initdb-options
--options=initdb-options

指定要直接传递给 initdb 命令的选项。-o 可以被多次指定,所有给定的选项都会被传递下去。

initdb-options 通常应该用单引号或双引号括起来,以确保它们作为一个整体被传递。

-p path

指定 postgres 可执行文件的位置。默认情况下,postgres 可执行文件取自与 pg_ctl 相同的目录,如果没有找到,则取自硬编码的安装目录。除非你在做一些不寻常的事情,并且遇到了找不到 postgres 可执行文件的错误,否则不需要使用此选项。

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

-s
--silent

只打印错误,不打印信息性消息。

-t seconds
--timeout=seconds

指定等待操作完成时的最大等待秒数(参见选项 -w)。默认为 PGCTLTIMEOUT 环境变量的值,如果未设置该变量,则为 60 秒。

-V
--version

打印 pg_ctl 的版本并退出。

-w
--wait

等待操作完成。start、stop、restart、promote 和 register 模式支持此选项,并且对这些模式而言这是默认行为。

在等待期间,pg_ctl 会反复检查服务器的 PID 文件,并在两次检查之间休眠一小段时间。当 PID 文件指示服务器已准备好接受连接时,即认为启动完成。当服务器移除 PID 文件时,即认为关闭完成。pg_ctl 会根据启动或关闭是否成功返回相应的退出码。

如果操作未在超时时间内完成(参见选项 -t),那么 pg_ctl 将以非零退出状态退出。但请注意,该操作可能会继续在后台运行并最终成功。

-W
--no-wait

不等待操作完成。此选项与 -w 选项相反。

如果禁用了等待,则会触发所请求的操作,但不会提供关于其是否成功的反馈。在这种情况下,将不得不使用服务器日志文件或外部监控系统来检查操作的进展和成功与否。

在 PostgreSQL 的早期版本中,除 stop 模式以外,这是默认设置。

-?
--help

显示关于 pg_ctl 命令行参数的帮助信息,然后退出。

如果指定的选项有效,但与所选的操作模式无关,pg_ctl 将忽略该选项。

Windows 选项

-e source

pg_ctl 作为 Windows 服务运行时用于向事件日志记录消息的事件源名称。默认值为 PostgreSQL。请注意,这只控制由 pg_ctl 自身发送的消息;服务器一旦启动,将使用由其 event_source 参数指定的事件源。如果服务器在启动的极早期、在该参数被设置之前就发生失败,它可能也会使用默认事件源名称 PostgreSQL 来记录日志。

-N servicename

要注册的系统服务的名称。此名称将同时用作服务名称和显示名称。默认值为 PostgreSQL。

-P password

运行服务所使用的用户的密码。

-S start-type

系统服务的启动类型。start-type 可以是 auto 或 demand,也可以是这两者之一的首字母。如果省略此选项,默认为 auto。

-U username

运行服务所使用的用户的用户名。对于域用户,请使用 DOMAIN\username 格式。

环境

PGCTLTIMEOUT

等待启动或关闭完成时默认的秒数上限。如果未设置,默认值为 60 秒。

PGDATA

默认的数据目录位置。

大多数 pg_ctl 模式都需要知道数据目录的位置;因此必须使用 -D 选项,除非已设置 PGDATA。

有关影响服务器的其他变量,请参见 postgres。

文件

postmaster.pid

pg_ctl 会检查数据目录中的这个文件,以确定服务器当前是否正在运行。

postmaster.opts

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

示例

启动服务器

要启动服务器,并一直等待到服务器开始接受连接:

$ pg_ctl start

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

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

停止服务器

要停止服务器,请使用:

$ pg_ctl stop

-m 选项允许控制服务器如何关闭:

$ pg_ctl stop -m smart

重启服务器

重启服务器几乎等效于先停止服务器再启动它,区别在于默认情况下 pg_ctl 会保存并重用传递给上一个运行实例的命令行选项。要使用与之前相同的选项重启服务器,请使用:

$ pg_ctl restart

但如果指定了 -o,它会替换之前的所有选项。要使用端口 5433 重启,并在重启时禁用 fsync:

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

显示服务器状态

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

$ pg_ctl status

pg_ctl: server is running (PID: 13718)
/usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data" "-p" "5433" "-B" "128"

第二行是重启模式下会调用的命令。

另请参阅

initdb, postgres