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