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 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 ]

Description

pg_ctl 是用于初始化 PostgreSQL 数据库集群,启动,停止或重新启动 PostgreSQL 数据库服务器(postgres)或显示正在运行的服务器状态的 Util。尽管可以手动启动服务器,但是 pg_ctl 封装了诸如重定向日志输出以及与终端和进程组正确分离之类的任务。它还提供了方便的选项以实现受控关机。

initinitdb模式创建一个新的 PostgreSQL 数据库集群,即将由单个服务器实例 Management 的数据库的集合。此模式调用initdb命令。有关详情,请参见initdb

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

stop模式将关闭在指定数据目录中运行的服务器。 -m选项可以选择三种不同的关闭方法。 “智能”模式将 await 所有活动 Client 端断开连接并 await 任何在线备份完成。如果服务器处于热备用状态,则所有 Client 端断开连接后,恢复和流式复制将终止。 “快速”模式(默认)不 awaitClient 端断开连接,并且将终止正在进行的联机备份。将回滚所有活动的事务,并强制断开 Client 端的连接,然后关闭服务器。 “立即”模式将立即中止所有服务器进程,而不进行彻底关机。此选择将导致下次服务器启动期间的崩溃恢复周期。

restart模式有效地执行停止,然后再开始。这允许更改postgres命令行选项,或更改配置文件选项,这些选项必须重新启动服务器才能更改。如果在服务器启动期间在命令行上使用了相对路径,则restart可能会失败,除非在与服务器启动期间相同的当前目录中执行 pg_ctl。

reload模式只是向postgres服务器进程发送 SIGHUPsignal,从而使其重新读取其配置文件(postgresql.confpg_hba.conf等)。这允许更改不需要完全重新启动服务器即可生效的配置文件选项。

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

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

kill模式将 signal 发送到指定的进程。这在没有内置 kill 命令的 Microsoft Windows 上主要很有价值。使用--help查看支持的 signal 名称的列表。

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

unregister模式在 Microsoft Windows 上注销系统服务。这会撤消register命令的影响。

Options

  • -c
    --core-files

    • 尝试通过取消对核心文件施加的任何软资源限制,在可能的平台上使服务器崩溃以生成核心文件。通过允许从发生故障的服务器进程中获取堆栈跟踪,这对于调试或诊断问题很有用。
  • -D datadir
    --pgdata=datadir

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

    • 将服务器日志输出追加到* filename *。如果该文件不存在,则会创建它。 umask 设置为 077,因此默认情况下其他用户不允许访问日志文件。
  • -m mode
    --mode=mode

    • 指定关闭模式。 * mode *可以是smartfastimmediate或这三个字母之一的第一个字母。如果省略此选项,则默认为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

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

    • 打印 pg_ctl 版本并退出。
  • -w
    --wait

    • await 操作完成。模式startstoprestartpromoteregister支持此功能,这是这些模式的默认设置。

await 时,pg_ctl反复检查服务器的 PID 文件,在两次检查之间睡眠一小段时间。当 PID 文件指示服务器已准备好接受连接时,启动被视为完成。当服务器删除 PID 文件时,关闭被视为完成。 pg_ctl根据启动或关闭的成功返回退出代码。

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

  • -W
    --no-wait

    • 不要 await 操作完成。这与-w相反。

如果禁用了 await,则会触发请求的操作,但是不会收到有关其成功的反馈。在这种情况下,必须使用服务器日志文件或外部监视系统来检查操作的进度和成功性。

在 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 *可以是autodemand,也可以是这两个中的一个的首字母。如果省略此选项,则auto是默认值。
  • -U username

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

Environment

  • PGCTLTIMEOUT

    • await 启动或关闭完成时 await 的秒数的默认限制。如果未设置,则默认值为 60 秒。
  • PGDATA

    • 默认数据目录位置。

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

像大多数其他 PostgreSQLUtil 一样,pg_ctl也使用 libpq 支持的环境变量(请参见Section 33.14)。

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

Files

  • postmaster.pid

    • pg_ctl 检查数据目录中的该文件,以确定服务器当前是否正在运行。
  • postmaster.opts

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

Examples

启动服务器

要启动服务器,请 await 服务器接受连接:

$ 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 输出的 samples 状态:

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

第二行是将在重新启动模式下调用的命令。

See Also

initdb, postgres