2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2

18.5. 關閉伺服器 #

有幾種關閉資料庫伺服器的方法。在底層,它們都歸結為向 supervisor postgres 程序傳送訊號。

如果您使用的是預打包版本的 PostgreSQL,並且您使用了其啟動伺服器的規定,那麼您也應該使用其停止伺服器的規定。請參閱特定軟體包的文件瞭解詳情。

當直接管理伺服器時,您可以透過向 postgres 程序傳送不同的訊號來控制關閉的型別。

SIGTERM

這是智慧關閉模式。收到 SIGTERM 後,伺服器將不允許新的連線,但允許現有會話正常完成工作。它只在所有會話終止後才關閉。如果伺服器在請求智慧關閉時處於恢復狀態,則恢復和流複製將在所有常規會話終止後才停止。

SIGINT

這是快速關閉模式。伺服器將不允許新的連線,並向所有現有伺服器程序傳送 SIGTERM,這將導致它們中止當前事務並迅速退出。然後它會等待所有伺服器程序退出,最後關閉。

SIGQUIT

這是立即關閉模式。伺服器將向所有子程序傳送 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 訊號。

提交更正

如果您在文件中發現任何不正確之處、與您對特定功能的實際體驗不符之處,或者需要進一步澄清之處,請使用 此表單 報告文件問題。