16.6. 关闭服务器

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

SIGTERM

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

SIGINT

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

SIGQUIT

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

Caution

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

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

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

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