PostgreSQL關(guān)閉數(shù)據(jù)庫服務的三種模式
PostgreSQL 提供了三種關(guān)閉數(shù)據(jù)庫服務的不同方式,它們最終都是發(fā)送一個關(guān)閉信號到 postgres 主服務進程。
智能關(guān)閉模式
智能關(guān)閉(Smart Shutdown)模式向 postgres 主服務進程發(fā)送一個 SIGTERM 信號。此時服務器不允許新的客戶端連接,同時等待已有會話正常完成工作。當所有會話都主動終止連接之后關(guān)閉服務。如果數(shù)據(jù)庫服務正在執(zhí)行恢復操作時發(fā)送了關(guān)閉命令,恢復操作和流復制都會等待所有常規(guī)會話終止后停止。
使用 pg_ctl 工具關(guān)閉數(shù)據(jù)庫服務的命令如下:
$ pg_ctl stop -m smart
其中,-m 參數(shù)用于指定關(guān)閉模式,smart 表示智能模式。
PostgreSQL 智能關(guān)閉模式類似于 Oracle 數(shù)據(jù)庫中的正常關(guān)閉(shutdown normal)模式。
快速關(guān)閉模式
快速關(guān)閉(Fast Shutdown)模式對應的信號為 SIGINT。此時服務器不允許新的客戶端連接,同時向所有的服務進程發(fā)送 SIGTERM 信號,回滾進行中的事務并且強制斷開所有客戶端的連接,然后關(guān)閉數(shù)據(jù)庫。
使用 pg_ctl 工具快速關(guān)閉數(shù)據(jù)庫服務的命令如下:
$ pg_ctl stop -m fast $ pg_ctl stop
其中,fast 表示快速模式,它也是默認模式。
PostgreSQL 快速關(guān)閉模式類似于 Oracle 數(shù)據(jù)庫中的立即關(guān)閉(shutdown immediate)模式。
立即關(guān)閉模式
第三種模式是立即關(guān)閉(Immediate Shutdown),對應的系統(tǒng)信號為 SIGQUIT。
主服務器進程向所有的子進程發(fā)送 SIGQUIT 信號,如果 5 秒內(nèi)子進程沒有終止,繼續(xù)發(fā)送立即終止的 SIGKILL 信號。當所有子進程退出后,主服務進程立即終止,不會執(zhí)行常規(guī)的數(shù)據(jù)庫關(guān)閉流程。這種模式會導致下一次啟動數(shù)據(jù)庫服務時需要執(zhí)行恢復操作(重做 WAL 日志),只推薦在緊急情況下使用。
使用 pg_ctl 工具立即關(guān)閉數(shù)據(jù)庫服務的命令如下:
$ pg_ctl stop -m immediate
其中,immediate 表示立即模式。
PostgreSQL 快速關(guān)閉模式類似于 Oracle 數(shù)據(jù)庫中的立即關(guān)閉(shutdown abort)模式。
注意事項
三種關(guān)閉模式中,智能模式最安全,能夠確保數(shù)據(jù)的完整性和一致性;但是這種模式可能耗時較長,因為它需要等待客戶端主動斷開連接。快速模式可能導致事務的中斷,但不會導致數(shù)據(jù)不一致,優(yōu)點在于速度較快,一般情況下推薦使用這種模式。 立即模式速度最快,但是可能會導致數(shù)據(jù)不一致,再次啟動時可以通過 WAL 日志回放恢復到一致狀態(tài),只有在緊急情況或者其他模式無法關(guān)閉時推薦使用。
除了 Windows 之外的其他操作系統(tǒng)也可以直接使用 kill 命令發(fā)送信號關(guān)閉數(shù)據(jù)庫,例如:
$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
postmaster.pid 文件中存儲了主服務進程(postgres)的 PID。
不建議使用 SIGKILL 信號關(guān)閉服務,這種方式會阻止服務釋放共享內(nèi)存和信號量。而且,這種方式終止主服務器進程時不會發(fā)送信息到子進程,因此還需要手動關(guān)閉每個子進程。
Oracle 數(shù)據(jù)庫還支持一種事務關(guān)閉(shutdown transactional)模式,不允許新客戶連接,但是會等待進行中的事務完成提交后斷開客戶端連接,然后關(guān)閉數(shù)據(jù)庫。PostgreSQL 沒有這種對應的關(guān)閉模式。
到此這篇關(guān)于PostgreSQL關(guān)閉數(shù)據(jù)庫服務的三種模式的文章就介紹到這了,更多相關(guān)PostgreSQL關(guān)閉數(shù)據(jù)庫服務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL使用執(zhí)行計劃的入門到實戰(zhàn)調(diào)優(yōu)指南
在數(shù)據(jù)庫性能優(yōu)化領(lǐng)域,執(zhí)行計劃(Execution?Plan)是開發(fā)者與數(shù)據(jù)庫優(yōu)化器對話的翻譯器,PostgreSQL的執(zhí)行計劃不僅揭示了SQL語句的執(zhí)行路徑,更通過成本估算、實際耗時等關(guān)鍵指標,,為性能瓶頸定位提供了科學依據(jù),本文將系統(tǒng)講解PostgreSQL執(zhí)行計劃的核心機制與調(diào)優(yōu)方法2026-01-01
PostgreSQL JOIN 聯(lián)表查詢實戰(zhàn)演練(內(nèi)連接 / 外連接
本文介紹了PostgreSQL中的JOIN查詢,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN和CROSS JOIN,通過實際示例和Java代碼,展示了如何在Java應用程序中執(zhí)行這些JOIN操作,感興趣的朋友跟隨小編一起看看吧2026-03-03
PostgreSQL 自定義自動類型轉(zhuǎn)換操作(CAST)
這篇文章主要介紹了PostgreSQL 自定義自動類型轉(zhuǎn)換操作(CAST),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
PostgreSQL AUTO INCREMENT(自動增長) 的使用
本文主要介紹 PostgreSQL的自動增長機制,包括 SERIAL(傳統(tǒng)方式)、IDENTITY(推薦標準)和 SEQUENCE(底層對象)三種實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2025-11-11
PostgreSQL已經(jīng)存在的表怎么設置id自增長詳解
這篇文章主要介紹了如何為已有的PostgreSQL表設置ID字段為自增,包括創(chuàng)建序列、設置默認值、可能的表結(jié)構(gòu)修改以及重置序列的步驟,需要的朋友可以參考下2025-03-03

