pg_ctl — 初始化、启动、停止或控制一个 PostgreSQL 服务器
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
模式实际上执行 stop 操作,然后接着执行 start 操作。这允许更改 postgres
命令行选项或更改无法在不重新启动服务器的情况下更改的配置文件选项。如果在服务器启动期间在命令行中使用了相对路径,则除非在服务器启动期间相同的当前目录中执行 pg_ctl,否则 restart
可能会失败。
reload
模式仅仅向 postgres
服务器进程发送 SIGHUP 信号,导致其重新读取其配置文件(postgresql.conf
、pg_hba.conf
等)。这允许更改配置项文件选项,这些选项无需进行完全服务器重新启动就能生效。
status
模式检查服务器是否在指定的数据目录中运行。如果是,则服务器的PID将显示用来调用它的命令行选项。如果服务器未运行,pg_ctl 返回退出状态 3。如果没有指定可访问的数据目录,pg_ctl 将返回退出状态 4。
promote
模式命令运行在指定数据目录中的备用服务器结束备用模式并开始读写操作。
logrotate
模式旋转服务器日志文件。有关如何将此模式与外部日志轮换工具配合使用,请参阅第 24.3 节。
kill
模式向指定进程发送信号。这在主要价值在于 Microsoft Windows 上,该系统中没有内置 kill 命令。使用 --help
以查看受支持信号名称列表。
register
模式将 PostgreSQL 服务器注册为 Microsoft Windows 上的系统服务。 -S
选项允许选择服务启动类型:“auto”(系统启动时自动启动服务)或 “demand”(按需启动服务)。
unregister
模式注销 Microsoft Windows 上的系统服务。这将消除 register
命令的效果。
-c
--core-files
尝试允许服务器崩溃产生核心文件,在可能的平台上,通过解除对核心文件设置的任何软资源限制来实现。这在调试或诊断问题方面很有用,因为它允许从失败的服务器进程获取堆栈轨迹。
-D 数据目录
--pgdata=数据目录
指定数据库配置文件的文件系统位置。如果省略此选项,则使用环境变量 PGDATA
。
-l 文件名
--log=文件名
将服务器日志输出追加到 文件名
。如果文件不存在,则创建文件。将 umask 设置为 077,因此默认情况下拒绝其他用户访问该日志文件。
-m 模式
--mode=模式
指定关闭模式。 模式
可以是 智能
、快速
或 立即
,或这三个单词的首字母。如果省略此选项,则默认值为 快速
。
-o 选项
--options=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
等待操作完成。这在 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 会予以忽略。
-e source
运行作为一个 Windows 服务时,pg_ctl 记录到事件日志中使用的事件源名称。默认为 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"
第二行是在重新启动模式下调用的命令。