關閉資料庫伺服器的方式有好幾種。在底層,它們都是透過傳送訊號給監護程序 postgres
程序來完成。
如果您使用的是預先封裝版本的 PostgreSQL,並且您使用其提供的機制來啟動伺服器,那麼您也應該使用其提供的機制來停止伺服器。請參閱套件層級的文件以了解詳細資訊。
當直接管理伺服器時,您可以透過傳送不同的訊號給 postgres
程序來控制關機類型
這是智慧關機模式。在收到 SIGTERM 後,伺服器會禁止新的連線,但允許現有的連線正常結束其工作。只有在所有連線終止後才會關機。如果伺服器在請求智慧關機時處於復原狀態,則只有在所有常規連線終止後,才會停止復原和串流複製。
這是快速關機模式。伺服器會禁止新的連線,並向所有現有的伺服器程序傳送 SIGTERM,這將導致它們中止目前的交易並立即退出。然後,它會等待所有伺服器程序退出,最後關機。
這是立即關機模式。伺服器將向所有子程序傳送 SIGQUIT 並等待它們終止。如果在 5 秒內沒有任何程序終止,將向它們傳送 SIGKILL。監護伺服器程序會在所有子程序退出後立即退出,而不執行正常的資料庫關機處理。這將導致下次啟動時進行復原(透過重播 WAL 日誌)。僅建議在緊急情況下使用。
pg_ctl 程式提供了一個方便的介面,用於傳送這些訊號以關閉伺服器。或者,您可以使用非 Windows 系統上的 kill
直接傳送訊號。ThePID可以使用 ps
程式找到 postgres
程序的 PID,或者從資料目錄中的 postmaster.pid
檔案中找到。例如,執行快速關機
$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
最好不要使用 SIGKILL 來關閉伺服器。這樣做會阻止伺服器釋放共享記憶體和信號量。此外,SIGKILL 會在不允許其將訊號轉發給其子程序的情況下終止 postgres
程序,因此可能還需要手動終止個別的子程序。
若要在允許其他連線繼續的情況下終止個別連線,請使用 pg_terminate_backend()
(請參閱 表 9.94) 或向與該連線關聯的子程序傳送 SIGTERM 訊號。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。