选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.5 已于 2021 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

17.5. 关闭服务器 #

有几种方法可以关闭数据库服务器。通过向主管进程发送不同的信号,可以控制关闭类型,该进程为 postgres

SIGTERM

这是智能关闭模式。 收到SIGTERM后,服务器禁止新连接,但允许现有会话正常结束工作。 仅在所有会话终止后才会关闭。如果服务器处于在线备份模式,还会等待该模式结束。在线备份模式生效期间,仍允许新的超级用户连接(这一例外允许超级用户连接以结束在线备份模式),但不允许其他新连接。如果服务器在请求智能关闭时处于恢复状态, 则只有在所有常规会话终止后,恢复和流复制才会停止。

SIGINT

这是快速关闭模式。 服务器禁止新连接并向所有现有服务器进程发送SIGTERM, 这将导致它们中止当前事务并迅速退出。然后等待所有服务器进程退出,最后关闭。 如果服务器处于在线备份模式,该模式将被终止,导致备份不可用。

SIGQUIT

这是立即关闭模式。服务器将向所有子进程发送 SIGQUIT 并等待它们终止。如果有任何进程在 5 秒内未终止,它们将被发送 SIGKILL。一旦所有子进程退出,主管服务器进程将立即退出,而不进行正常的数据库关闭处理。这会导致下次启动时通过重放 WAL 日志执行恢复。仅建议在紧急情况下使用。

pg_ctl程序提供了一个便于发送这些信号以关闭服务器的接口。另外,在非 Windows 系统上,你也可以用kill直接发送这些信号。可以用ps程序,或者从数据目录中的postmaster.pid文件找到postgres进程的PID。例如,要执行一次快速关闭:

$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

重要

最好不要使用 SIGKILL 关闭服务器。这样做会阻止服务器释放共享内存和信号量,因此在启动新服务器之前,可能必须手动释放它们。此外,SIGKILL 会终止 postgres 进程,使其没有机会将信号转发给子进程,因此还必须手动逐个终止子进程。

要终止单个会话并允许其他会话继续运行,可使用pg_terminate_backend()(参阅表 9.67),或者向与该会话相关的子进程发送SIGTERM信号。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。