2025年9月25日: PostgreSQL 18 发布!
支持的版本:当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本:devel
不支持的版本: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

pg_ctl

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

概要

pg_ctl init[db] [-D 数据目录] [-s] [-o initdb 选项]

pg_ctl start [-D 数据目录] [-l 文件名] [-W] [-t 秒数] [-s] [-o 选项] [-p 路径] [-c]

pg_ctl stop [-D 数据目录] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t 秒数] [-s]

pg_ctl restart [-D 数据目录] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t 秒数] [-s] [-o 选项] [-c]

pg_ctl reload [-D 数据目录] [-s]

pg_ctl status [-D 数据目录]

pg_ctl promote [-D 数据目录] [-W] [-t 秒数] [-s]

pg_ctl logrotate [-D 数据目录] [-s]

pg_ctl kill 信号名称 进程ID

在 Microsoft Windows 上,还有

pg_ctl register [-D 数据目录] [-N 服务名称] [-U 用户名] [-P 密码] [-S a[uto] | d[emand] ] [-e ] [-W] [-t 秒数] [-s] [-o 选项]

pg_ctl unregister [-N 服务名称]

描述

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 将服务器的输出追加到日志文件中来更改这些默认行为。建议使用 -l 或输出重定向。

stop 模式关闭在指定数据目录中运行的服务器。可以使用 -m 选项选择三种不同的关闭方法。智能 模式不允许新连接,然后等待所有现有客户端断开连接。如果服务器处于热备用模式,则在所有客户端断开连接后,恢复和流复制将终止。快速 模式(默认)不等待客户端断开连接。所有活动事务都将被回滚,客户端将被强制断开连接,然后服务器将关闭。立即 模式将立即中止所有服务器进程,而无需干净地关闭。此选择将在下次服务器启动时导致崩溃恢复周期。

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

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

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

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

logrotate 模式轮转服务器日志文件。有关如何将此模式与外部日志轮转工具一起使用,请参阅 第 24.3 节

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

register 模式在 Microsoft Windows 上将 PostgreSQL 服务器注册为系统服务。-S 选项允许选择服务启动类型,可以是自动(在系统启动时自动启动服务)或手动(按需启动服务)。

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

选项

-c
--core-files

尝试允许服务器崩溃生成核心文件(在可能的情况下),通过解除对核心文件的任何软资源限制。这对于通过获取失败的服务器进程的堆栈跟踪来调试或诊断问题很有用。

-D 数据目录
--pgdata=数据目录

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

-l 文件名
--log=文件名

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

-m 模式
--mode=模式

指定关机模式。模式 可以是 smartfastimmediate,或者这三个中的一个首字母。如果省略此选项,则 fast 是默认值。

-o 选项
--options=选项

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

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

-o initdb 选项
--options=initdb 选项

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

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

-p 路径

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

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

-s
--silent

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

-t 秒数
--timeout=秒数

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

-V
--version

打印 pg_ctl 版本并退出。

-w
--wait

等待操作完成。这支持 startstoprestartpromoteregister 模式,并且是这些模式的默认行为。

等待时,pg_ctl 会重复检查服务器的PID文件,并在每次检查之间短暂休眠。启动被认为完成当PID文件指示服务器已准备好接受连接。关闭被认为完成当服务器删除PID文件。pg_ctl 将根据启动或关闭的成功与否返回退出代码。

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

-W
--no-wait

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

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

在 PostgreSQL 的先前版本中,这是默认行为,除了 stop 模式。

-?
--help

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

如果指定了一个有效但与选定的操作模式无关的选项,pg_ctl 将忽略它。

Windows 选项

-e

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

-N 服务名称

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

-P 密码

运行服务的用户的密码。

-S 启动类型

系统服务的启动类型。启动类型 可以是 autodemand,或其中一个的首字母。如果省略此选项,则 auto 是默认值。

-U 用户名

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

环境变量

PGCTLTIMEOUT

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

PGDATA

默认数据目录位置。

大多数 pg_ctl 模式都需要知道数据目录的位置;因此,除非设置了 PGDATA,否则需要 -D 选项。

有关影响服务器的其他变量,请参阅 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

提交更正

如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。