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是一個封裝好了的腳本, 給這個功能提供了一個便利的手段。