↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2
历史版本。 PostgreSQL 9.0 已结束支持。 2015-10-08. 请参阅 当前版本手册.

17.5. 关闭服务器 #

关闭数据库服务器有几种方式。通过向主postgres进程发送不同的信号来控制关闭的类型。

SIGTERM

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

SIGINT

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

SIGQUIT

This is the Immediate Shutdown mode. 主postgres进程将向所有子进程发送SIGQUIT并立即退出,而不进行正常的关闭。子进程收到SIGQUIT后同样立即退出。这将导致下次启动时需要恢复(通过重放 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.56),或者向与该会话相关的子进程发送SIGTERM信号。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.