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是一个封装好了的脚本, 给这个功能提供了一个便利的手段.