16.6. 關閉伺服器

有好幾種關閉資料庫伺服器的方法。 透過給伺服器進程發送不同的信號,您就可以控制關閉伺服器的方法。

SIGTERM

在收到SIGTERM信號後,伺服器不再允許新的連線,但是允許所有活躍的會話正常完成他們的工作, 只有在所有會話都結束任務(透過客戶端請求)後才關閉。 這是 智能關閉

SIGINT

伺服器不再允許新的連線,向所有活躍伺服器發送SIGTERM, (這樣會讓它們立刻退出),然後它等待子進程退出並關閉資料庫。 這是快速關閉

SIGQUIT

這是 立即關閉, 會令postmaster向所有子進程發送SIGQUIT並且立即退出,而不會妥善地關閉資料庫系統。 伺服器在收到SIGQUIT之後會立即退出。 這樣做會導致下次啟動時的恢復(透過重放 WAL 日誌)。 我們推薦只在緊急的時候使用這個方法。

pg_ctl 程序提供了一個發送這些信號關閉伺服器的便利接口。

另外,您可以用 kill 直接發送這些信號。 可以用 ps 命令找出 postmasterPID,或者也可以從資料目錄裡的文件 postmaster.pid 裡面找到。所以,舉例來說,要做一次快速關閉:

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

Important: 盡可能不要用SIGKILL關閉伺服器。 這樣會阻止伺服器清理共享內存和信號燈資源,那樣的話您只能在啟動伺服器之前自己手工做這件事。 另外,SIGKILL 直接把 postmaster 殺掉, 而不會等它把信號中繼給它的子進程,因此我們還需要手工殺掉每個獨立子進程。