跳轉到內容

PostgreSQL/管理例項

來自華夏公益教科書,開放的書籍,開放的世界


PostgreSQL **例項** 由在伺服器上連續執行的多個程序組成。它們使用公共配置檔案和 RAM 以協調的方式協同工作。因此,它們要麼全部執行,要麼全部不執行。

程序 *postmaster* 是其中之一。它啟動、停止和控制其他程序。*postmaster* 本身可以直接啟動,也可以藉助包裝程式 pg_ctl 啟動。它的簡化語法是

pg_ctl [ status | start | stop | restart | reload | init ] [-U username] [-P password] [--help]

例項必須由作業系統使用者 *postgres* 執行,而不是由 *root* 執行。

pg_ctlstatus 模式下執行時,它會列出例項的實際狀態。

$ pg_ctl status
pg_ctl: server is running (PID: 16244)
/usr/lib/postgresql/14/bin/postgres
$

您可以觀察例項是否正在執行,以及 *postmaster* 程序的程序 ID (PID)。

pg_ctlstart 模式下執行時,它會嘗試啟動例項。

$ pg_ctl start
...
...
 done
server started
$

當您看到上述訊息時,一切正常。

pg_ctlstop 模式下執行時,它會嘗試停止例項。

$ pg_ctl stop
...
...
 done
server stopped
$

當您看到上述訊息時,例項已關閉,所有與客戶端應用程式的連線都已關閉,並且沒有新的應用程式可以訪問資料庫。stop 模式知道三種不同的子模式來關閉例項

  • * 智慧模式等待所有活動客戶端斷開連線。
  • * 快速模式(預設模式)不等待客戶端斷開連線。所有活動事務都將回滾,客戶端將被強制斷開連線。
  • * 立即模式立即中止所有伺服器程序,而不會進行乾淨關閉。

語法:pg_ctl stop [-m s[mart] | f[ast] | i[mmediate] ]

pg_ctlrestart 模式下執行時,它執行與 stopstart 順序相同的操作。

reload 模式下,例項會讀取並重新載入其配置檔案。

初始化

[編輯 | 編輯原始碼]

init 模式下,例項使用 3 個數據庫 *template0*、*template1* 和 *postgres* 建立一個全新的叢集。此命令需要額外的引數 -D datadir 來知道它將在檔案系統的哪個位置建立新叢集。

啟動時自動啟動

[編輯 | 編輯原始碼]

在大多數情況下,希望 PostgreSQL 在伺服器啟動後立即啟動。這是否發生 - 與否 - 可以透過檔案 start.conf 配置。根據作業系統的不同,該檔案位於不同的 目錄 中。

只有一個條目,它的允許值為

  • auto: 在伺服器啟動/關閉時自動啟動/停止
  • manual: 不要自動啟動/停止,但允許手動管理,如上所述
  • disabled: 不允許使用 pg_ctlcluster 手動啟動(這很容易繞過,並且只是一種針對意外情況的小保護措施)


華夏公益教科書