3.6. 关闭服务器

有好几种关闭数据库服务器的方法. 通过给服务器进程发送不同的信号,你就可以控制关闭服务器的方法.

SIGTERM

在收到SIGTERM信号后,postmaster不再允许新的联接,但是 允许所有活跃的后端完成他们的工作,只有在所有后端都结束 任务(通过客户端请求)后才关闭. 这是 Smart Shutdown(智能关闭).

SIGINT

postmaster 不再允许新的联接,向所有活跃后端发送SIGTERM, (这样会让它们立刻退出),postmaster 等待子进程退出并关闭数据库. 这是Fast Shutdown(快速关闭)

SIGQUIT

这是 Immediate Shutdown(立即关闭), 会令postmaster向所有后端发送SIGQUIT并且立即退出(而不会 妥善地关闭数据库系统). 后端在收到SIGQUIT之后会立即退出. 这样做会导致下次启动时的恢复(通过重放 WAL 日志). 我们推荐只在紧急的时候使用这个方法.

Caution

尽可能不要用SIGKILL关闭 postmaster. 这样会导致数据崩溃以及 阻止清理共享内存资源,那样你只能自己手工做这件事.

你可以用ps命令找出 postmaster 的PID,或者也可以从数据目录里的文件 postmaster.pid 里面找到.所以,举例来说,要做一次快速关闭:

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

程序 pg_ctl是一个封装好了的脚本, 给这个功能提供了一个便利的手段.