# 19.5.关闭服务器

有几种方法可以关闭数据库服务器。在引擎盖下,他们都会向主管发送信号博士后过程

如果您使用的是PostgreSQL的预打包版本,并且您使用了它的规定来启动服务器,那么您还应该使用它的规定来停止服务器。有关详细信息,请参阅软件包级文档。

直接管理服务器时,可以通过向服务器发送不同的信号来控制关机类型博士后过程:

西格特姆

这是智能关机模式在收到SIGTERM后,服务器不允许新连接,但允许现有会话正常结束工作。只有在所有会话结束后,它才会关闭。如果服务器处于联机备份模式,它会额外等待,直到联机备份模式不再处于活动状态。当备份模式处于活动状态时,仍将允许新连接,但仅允许超级用户进行连接(此异常允许超级用户连接以终止联机备份模式)。如果在请求智能关机时服务器处于恢复状态,则只有在所有常规会话终止后,恢复和流式复制才会停止。

信号

这是快速关机工具模式服务器不允许新的连接并发送所有现有的服务器进程,这将导致它们中止当前事务并立即退出。然后等待所有服务器进程退出,最后关闭。如果服务器处于联机备份模式,备份模式将被终止,使备份无效。

西格奎特

这是立即关闭模式服务器将向所有子进程发送SIGQUIT,并等待它们终止。如果在5秒内没有终止,将发送SIGKILL。所有子进程退出后,主管服务器进程立即退出,而不进行正常的数据库关闭处理。这将导致下次启动时恢复(通过重放WAL日志)。只有在紧急情况下才建议这样做。

这个pg_ctl该程序提供了一个方便的接口,用于发送这些信号以关闭服务器。或者,您可以直接使用杀死在非Windows系统上。这条河的PID博士后可以使用附言程序,或从文件邮政局长。pid在数据目录中。例如,要快速关机:

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

# 重要的

最好不要使用SIGKILL关闭服务器。这样做将阻止服务器释放共享内存和信号量。此外,SIGKILL杀死了博士后进程,而不让它将信号中继到其子进程,因此可能需要手动终止各个子进程。

要在允许其他会话继续的同时终止单个会话,请使用pg_终止_后端()(见表9.86)或者向与会话关联的子进程发送SIGTERM信号。