pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
pg_ctl — 初始化、启动、停止或控制PostgreSQL服务器
pg_ctl init[db] [-s] [-D datadir] [-o initdb-options]
pg_ctl start [-w] [-t seconds] [-s] [-D datadir] [-l filename] [-o options] [-p path] [-c]
pg_ctl stop [-W] [-t seconds] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-t seconds] [-s] [-D datadir] [-c] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl promote [-s] [-D datadir]
pg_ctl kill signal_name process_id
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-S a[uto] | d[emand] ] [-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可能失败。
reload模式只是向postgres服务器进程发送一个SIGHUP信号,使其重新读取配置文件(postgresql.conf、pg_hba.conf等)。这样就可以修改那些无需完全重启服务器即可生效的配置文件选项。
status模式会检查指定数据目录中是否有服务器正在运行。若有,则显示服务器的PID以及调用它时使用的命令行选项。若服务器未运行,进程返回退出状态 3。若未指定一个可访问的数据目录,进程返回退出状态 4。
在promote模式下,会指示在指定数据目录中运行的备库退出恢复,并开始进行读写操作。
kill模式向指定进程发送信号。这在没有内置kill命令的Microsoft Windows上尤其有用。使用--help可查看受支持的信号名称列表。
register模式允许在Microsoft Windows上注册一个系统服务。-S选项允许选择服务启动类型,可以是“auto”(系统启动时自动启动服务)或“demand”(按需启动服务)。
unregister模式会在Microsoft Windows上注销一个系统服务。这会撤销register命令的效果。
-c--core-file在支持的平台上,通过解除对核心转储文件施加的任何软资源限制,尝试允许服务器在崩溃时生成核心转储文件。这样就可以从失败的服务器进程中获得栈跟踪,从而有助于调试或诊断问题。
-D datadir--pgdata datadir指定数据库配置文件所在的文件系统位置。若省略此选项,则使用环境变量PGDATA。
-l filename--log filename将服务器日志输出追加到filename。如果该文件不存在,就会创建它。umask被设置为 077,因此默认情况下其他用户无法访问该日志文件。
-m mode--mode mode指定关闭模式。mode可以是smart、fast或immediate,也可以是这三者之一的首字母。若省略此选项,则使用fast。
-o options指定要直接传递给postgres命令的选项;多次给出的选项会被追加。
通常应将选项放在单引号或双引号中,以确保它们作为一个整体被传递。
-o initdb-options指定要直接传递给initdb命令的选项。
通常应将选项放在单引号或双引号中,以确保它们作为一个整体被传递。
-p path指定postgres可执行程序的位置。默认情况下,postgres可执行程序取自与pg_ctl相同的目录;如果那里没有,则取自硬编码的安装目录。除非采用了某些非常规方式,并收到找不到postgres可执行程序的错误,否则通常不需要使用此选项。
在init模式中,此选项同样指定initdb可执行程序的位置。
-s--silent只打印错误,不打印信息性消息。
-t--timeout等待启动或关闭完成时最多等待多少秒。默认值为环境变量PGCTLTIMEOUT的值;如果未设置该环境变量,则默认为 60 秒。
-V--version打印pg_ctl的版本并退出。
-w等待启动或关闭完成。对关闭来说,等待是默认选项;但对启动来说不是。等待启动时,pg_ctl会反复尝试连接服务器。等待关闭时,pg_ctl会等待服务器移除其PID文件。此选项允许在启动时输入SSL口令。pg_ctl会根据启动或关闭是否成功返回相应的退出代码。
-W不等待启动或关闭完成。对 start 和 restart 模式来说,这是默认行为。
-?--help显示有关pg_ctl命令行参数的帮助并退出。
-e source指定以 Windows 服务方式运行时,pg_ctl写入事件日志所使用的事件源名称。默认值为PostgreSQL。注意,这只控制pg_ctl本身的日志记录;服务器一旦启动,就会使用event_source指定的事件源。如果服务器在启动早期失败,它也可能使用默认事件源PostgreSQL记录日志。
-N servicename要注册的系统服务名称。该名称会同时用作服务名和显示名。
-P password用于启动该服务的用户密码。
-S start-type要注册的系统服务的启动类型。start-type 可以是auto、demand,或者两者之一的首字母。若省略此选项,则使用auto。
-U username用于启动该服务的用户名。对于域用户,请使用DOMAIN\username格式。
PGCTLTIMEOUT等待启动或关闭完成时,默认的等待秒数上限。如果未设置,默认值为 60 秒。
PGDATA默认数据目录位置。
pg_ctl与大多数其他PostgreSQL工具一样,也使用libpq所支持的环境变量(参见第 32.14 节)。其他服务器相关变量见postgres。
postmaster.pid数据目录中该文件的存在与否,用于帮助pg_ctl确定服务器当前是否正在运行。
postmaster.opts如果该文件存在于数据目录中,pg_ctl(在restart模式下)会将该文件的内容作为选项传递给postgres,除非被-o选项覆盖。该文件的内容也会在status模式下显示出来。
要启动服务器:
$pg_ctl start
要启动服务器并等待其开始接受连接:
$pg_ctl -w start
要使用端口 5433 启动服务器,并在未启用fsync的情况下运行,可使用:
$pg_ctl -o "-F -p 5433" start
要停止服务器,可使用:
$pg_ctl stop
-m选项允许控制服务器如何关闭:
$pg_ctl stop -m fast
重启服务器几乎等同于先停止服务器再重新启动,只不过pg_ctl会保存并重用传给前一个运行实例的命令行选项。以最简单的形式重启服务器,可使用:
$pg_ctl restart
要重启服务器并等待其关闭和重启完成:
$pg_ctl -w restart
要使用端口 5433 重启服务器,并在重启时禁用fsync,可使用:
$pg_ctl -o "-F -p 5433" restart
下面是pg_ctl状态输出的示例:
$pg_ctl statuspg_ctl: server is running (PID: 13718) /usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data" "-p" "5433" "-B" "128"
这是在重启模式下会调用的命令行。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。