PostgreSQL/管理例項
PostgreSQL **例項** 由在伺服器上連續執行的多個程序組成。它們使用公共配置檔案和 RAM 以協調的方式協同工作。因此,它們要麼全部執行,要麼全部不執行。
程序 *postmaster* 是其中之一。它啟動、停止和控制其他程序。*postmaster* 本身可以直接啟動,也可以藉助包裝程式 pg_ctl 啟動。它的簡化語法是
pg_ctl [ status | start | stop | restart | reload | init ] [-U username] [-P password] [--help]
例項必須由作業系統使用者 *postgres* 執行,而不是由 *root* 執行。
當 pg_ctl 在 status 模式下執行時,它會列出例項的實際狀態。
$ pg_ctl status pg_ctl: server is running (PID: 16244) /usr/lib/postgresql/14/bin/postgres $
您可以觀察例項是否正在執行,以及 *postmaster* 程序的程序 ID (PID)。
當 pg_ctl 在 start 模式下執行時,它會嘗試啟動例項。
$ pg_ctl start ... ... done server started $
當您看到上述訊息時,一切正常。
當 pg_ctl 在 stop 模式下執行時,它會嘗試停止例項。
$ pg_ctl stop ... ... done server stopped $
當您看到上述訊息時,例項已關閉,所有與客戶端應用程式的連線都已關閉,並且沒有新的應用程式可以訪問資料庫。stop 模式知道三種不同的子模式來關閉例項
- * 智慧模式等待所有活動客戶端斷開連線。
- * 快速模式(預設模式)不等待客戶端斷開連線。所有活動事務都將回滾,客戶端將被強制斷開連線。
- * 立即模式立即中止所有伺服器程序,而不會進行乾淨關閉。
語法:pg_ctl stop [-m s[mart] | f[ast] | i[mmediate] ]
當 pg_ctl 在 restart 模式下執行時,它執行與 stop 和 start 順序相同的操作。
在 reload 模式下,例項會讀取並重新載入其配置檔案。
在 init 模式下,例項使用 3 個數據庫 *template0*、*template1* 和 *postgres* 建立一個全新的叢集。此命令需要額外的引數 -D datadir 來知道它將在檔案系統的哪個位置建立新叢集。
在大多數情況下,希望 PostgreSQL 在伺服器啟動後立即啟動。這是否發生 - 與否 - 可以透過檔案 start.conf 配置。根據作業系統的不同,該檔案位於不同的 目錄 中。
只有一個條目,它的允許值為
- auto: 在伺服器啟動/關閉時自動啟動/停止
- manual: 不要自動啟動/停止,但允許手動管理,如上所述
- disabled: 不允許使用 pg_ctlcluster 手動啟動(這很容易繞過,並且只是一種針對意外情況的小保護措施)