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 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

pg_ctl

pg_ctl — 初始化、啟動、停止或控制 PostgreSQL 伺服器

概要

pg_ctl init[db] [-D 資料目錄] [-s] [-o initdb 選項]

pg_ctl start [-D 資料目錄] [-l 檔名] [-W] [-t 秒數] [-s] [-o 選項] [-p 路徑] [-c]

pg_ctl stop [-D 資料目錄] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t 秒數] [-s]

pg_ctl restart [-D 資料目錄] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t 秒數] [-s] [-o 選項] [-c]

pg_ctl reload [-D 資料目錄] [-s]

pg_ctl status [-D 資料目錄]

pg_ctl promote [-D 資料目錄] [-W] [-t 秒數] [-s]

pg_ctl logrotate [-D 資料目錄] [-s]

pg_ctl kill 訊號名稱 程序ID

在 Microsoft Windows 上,還有

pg_ctl register [-D 資料目錄] [-N 服務名稱] [-U 使用者名稱] [-P 密碼] [-S a[uto] | d[emand] ] [-e ] [-W] [-t 秒數] [-s] [-o 選項]

pg_ctl unregister [-N 服務名稱]

描述

pg_ctl 是一個用於初始化 PostgreSQL 資料庫叢集、啟動、停止或重啟 PostgreSQL 資料庫伺服器(postgres)或顯示正在執行的伺服器狀態的工具。雖然伺服器可以手動啟動,但 pg_ctl 封裝了諸如重定向日誌輸出以及正確從終端和程序組分離等任務。它還提供了方便的選項用於受控關機。

initinitdb 模式建立了一個新的 PostgreSQL 資料庫叢集,即由單個伺服器例項管理的資料庫集合。此模式呼叫 initdb 命令。有關詳細資訊,請參閱 initdb

start 模式啟動一個新伺服器。伺服器以後臺模式啟動,其標準輸入連線到 /dev/null(或 Windows 上的 nul)。在類 Unix 系統上,預設情況下,伺服器的標準輸出和標準錯誤會發送到 pg_ctl 的標準輸出(而不是標準錯誤)。pg_ctl 的標準輸出應隨後重定向到檔案或管道到另一個程序,例如像 rotatelogs 這樣的日誌輪轉程式;否則 postgres 將從後臺向控制終端寫入輸出,並且不會離開 shell 的程序組。在 Windows 上,預設情況下伺服器的標準輸出和標準錯誤會發送到終端。可以使用 -l 將伺服器的輸出追加到日誌檔案中來更改這些預設行為。建議使用 -l 或輸出重定向。

stop 模式關閉在指定資料目錄中執行的伺服器。可以使用 -m 選項選擇三種不同的關閉方法。智慧 模式不允許新連線,然後等待所有現有客戶端斷開連線。如果伺服器處於熱備用模式,則在所有客戶端斷開連線後,恢復和流複製將終止。快速 模式(預設)不等待客戶端斷開連線。所有活動事務都將被回滾,客戶端將被強制斷開連線,然後伺服器將關閉。立即 模式將立即中止所有伺服器程序,而無需乾淨地關閉。此選擇將在下次伺服器啟動時導致崩潰恢復週期。

restart 模式實際上執行一次停止,然後一次啟動。這允許更改 postgres 命令列選項,或更改無需重啟伺服器即可生效的配置檔案選項。如果在伺服器啟動時在命令列中使用了相對路徑,則 restart 可能會失敗,除非 pg_ctl 在與伺服器啟動時相同的當前目錄中執行。

reload 模式只需向 postgres 伺服器程序傳送一個 SIGHUP 訊號,使其重新讀取其配置檔案(postgresql.confpg_hba.conf 等)。這允許更改無需完整伺服器重啟即可生效的配置檔案選項。

status 模式檢查指定資料目錄中是否有一個伺服器正在執行。如果是,則顯示伺服器的PID以及用於呼叫它的命令列選項。如果伺服器未執行,pg_ctl 將返回退出狀態 3。如果未指定可訪問的資料目錄,pg_ctl 將返回退出狀態 4。

promote 模式命令在指定資料目錄中執行的備用伺服器結束備用模式並開始讀寫操作。

logrotate 模式輪轉伺服器日誌檔案。有關如何將此模式與外部日誌輪轉工具一起使用,請參閱 第 24.3 節

kill 模式向指定的程序傳送訊號。這主要在沒有內建 kill 命令的 Microsoft Windows 上很有用。使用 --help 可以看到支援的訊號名稱列表。

register 模式在 Microsoft Windows 上將 PostgreSQL 伺服器註冊為系統服務。-S 選項允許選擇服務啟動型別,可以是自動(在系統啟動時自動啟動服務)或手動(按需啟動服務)。

unregister 模式在 Microsoft Windows 上登出系統服務。這撤銷了 register 命令的效果。

選項

-c
--core-files

嘗試允許伺服器崩潰生成核心檔案(在可能的情況下),透過解除對核心檔案的任何軟資源限制。這對於透過獲取失敗的伺服器程序的堆疊跟蹤來除錯或診斷問題很有用。

-D 資料目錄
--pgdata=資料目錄

指定資料庫配置檔案在檔案系統中的位置。如果省略此選項,則使用環境變數 PGDATA

-l 檔名
--log=檔名

將伺服器日誌輸出追加到 檔名。如果檔案不存在,則會建立它。umask 設定為 077,因此預設情況下其他使用者無法訪問日誌檔案。

-m 模式
--mode=模式

指定關機模式。模式 可以是 smartfastimmediate,或者這三個中的一個首字母。如果省略此選項,則 fast 是預設值。

-o 選項
--options=選項

指定要直接傳遞給 postgres 命令的選項。-o 可以指定多次,所有給定的選項都將被傳遞。

選項 通常應該用單引號或雙引號括起來,以確保它們被作為一個組傳遞。

-o initdb 選項
--options=initdb 選項

指定要直接傳遞給 initdb 命令的選項。-o 可以指定多次,所有給定的選項都將被傳遞。

initdb 選項 通常應該用單引號或雙引號括起來,以確保它們被作為一個組傳遞。

-p 路徑

指定 postgres 可執行檔案的位置。預設情況下,postgres 可執行檔案來自與 pg_ctl 相同的目錄,或者如果找不到,則來自硬編碼的安裝目錄。除非你正在做一些不尋常的事情並且收到 postgres 可執行檔案未找到的錯誤,否則無需使用此選項。

init 模式下,此選項類似地指定 initdb 可執行檔案的位置。

-s
--silent

只打印錯誤,不列印資訊性訊息。

-t 秒數
--timeout=秒數

指定等待操作完成的最大秒數(請參閱選項 -w)。預設為 PGCTLTIMEOUT 環境變數的值,如果未設定,則預設為 60 秒。

-V
--version

列印 pg_ctl 版本並退出。

-w
--wait

等待操作完成。這支援 startstoprestartpromoteregister 模式,並且是這些模式的預設行為。

等待時,pg_ctl 會重複檢查伺服器的PID檔案,並在每次檢查之間短暫休眠。啟動被認為完成當PID檔案指示伺服器已準備好接受連線。關閉被認為完成當伺服器刪除PID檔案。pg_ctl 將根據啟動或關閉的成功與否返回退出程式碼。

如果在超時時間(請參閱選項 -t)內操作未完成,則 pg_ctl 將以非零退出狀態退出。但請注意,該操作可能仍在後臺繼續並最終成功。

-W
--no-wait

不要等待操作完成。這與選項 -w 相反。

如果停用了等待,請求的操作將被觸發,但不會對其成功提供反饋。在這種情況下,需要使用伺服器日誌檔案或外部監控系統來檢查操作的進度和成功與否。

在 PostgreSQL 的先前版本中,這是預設行為,除了 stop 模式。

-?
--help

顯示關於 pg_ctl 命令列引數的幫助,然後退出。

如果指定了一個有效但與選定的操作模式無關的選項,pg_ctl 將忽略它。

Windows 選項

-e

pg_ctl 在作為 Windows 服務執行時用於向事件日誌記錄的事件源名稱。預設值為 PostgreSQL。請注意,這僅控制 pg_ctl 本身傳送的訊息;一旦啟動,伺服器將使用其 event_source 引數指定的事件源。如果伺服器在啟動早期失敗,在該引數設定之前,它也可能使用預設事件源名稱 PostgreSQL 進行日誌記錄。

-N 服務名稱

要註冊的系統服務的名稱。此名稱將同時用作服務名稱和顯示名稱。預設值為 PostgreSQL

-P 密碼

執行服務的使用者的密碼。

-S 啟動型別

系統服務的啟動型別。啟動型別 可以是 autodemand,或其中一個的首字母。如果省略此選項,則 auto 是預設值。

-U 使用者名稱

執行服務的使用者的使用者名稱。對於域使用者,請使用 DOMAIN\username 格式。

環境變數

PGCTLTIMEOUT

等待啟動或關閉完成的秒數的預設限制。如果未設定,則預設為 60 秒。

PGDATA

預設資料目錄位置。

大多數 pg_ctl 模式都需要知道資料目錄的位置;因此,除非設定了 PGDATA,否則需要 -D 選項。

有關影響伺服器的其他變數,請參閱 postgres

檔案

postmaster.pid

pg_ctl 會檢查資料目錄中的此檔案,以確定伺服器當前是否正在執行。

postmaster.opts

如果此檔案存在於資料目錄中,pg_ctl(在 restart 模式下)會將檔案的內容作為選項傳遞給 postgres,除非被 -o 選項覆蓋。status 模式下也會顯示此檔案的內容。

示例

啟動伺服器

要啟動伺服器,直到伺服器開始接受連線

$ pg_ctl start

要使用埠 5433 啟動伺服器,並停用 fsync 執行,請使用

$ pg_ctl -o "-F -p 5433" start

停止伺服器

要停止伺服器,請使用

$ pg_ctl stop

-m 選項允許控制伺服器如何關閉

$ pg_ctl stop -m smart

重啟伺服器

重啟伺服器幾乎等同於停止伺服器然後重新啟動它,但預設情況下,pg_ctl 會儲存並重用傳遞給先前執行例項的命令列選項。要使用與之前相同的選項重啟伺服器,請使用

$ pg_ctl restart

但如果指定了 -o,它將替換任何之前的選項。要使用埠 5433 重啟,並在重啟時停用 fsync

$ pg_ctl -o "-F -p 5433" restart

顯示伺服器狀態

以下是 pg_ctl 的示例狀態輸出

$ pg_ctl status

pg_ctl: server is running (PID: 13718)
/usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data" "-p" "5433" "-B" "128"

第二行是在重啟模式下將呼叫的命令。

另請參閱

initdb, postgres

提交更正

如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。