支援的版本:目前 (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 datadir] [-s] [-o initdb-options]

pg_ctl start [-D datadir] [-l filename] [-W] [-t seconds] [-s] [-o options] [-p path] [-c]

pg_ctl stop [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s]

pg_ctl restart [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s] [-o options] [-c]

pg_ctl reload [-D datadir] [-s]

pg_ctl status [-D datadir]

pg_ctl promote [-D datadir] [-W] [-t seconds] [-s]

pg_ctl logrotate [-D datadir] [-s]

pg_ctl kill signal_name process_id

在 Microsoft Windows 上,也適用

pg_ctl register [-D datadir] [-N servicename] [-U username] [-P password] [-S a[uto] | d[emand] ] [-e source] [-W] [-t seconds] [-s] [-o options]

pg_ctl unregister [-N servicename]

描述

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 選項選擇三種不同的關閉方法。Smart(智慧型)模式會禁止新的連線,然後等待所有現有的用戶端中斷連線。如果伺服器處於熱備援狀態,一旦所有用戶端中斷連線,復原和串流複寫將會終止。Fast(快速)模式(預設值)不會等待用戶端中斷連線。所有作用中的交易都會被回滾,並且用戶端會被強制中斷連線,然後伺服器會被關閉。Immediate(立即)模式會立即中止所有伺服器程序,而不會進行乾淨的關閉。這個選擇將導致下次伺服器啟動期間發生崩潰復原週期。

restart 模式實際上執行一個停止,然後執行一個啟動。這允許變更 postgres 命令列選項,或變更配置檔案選項,這些選項必須重新啟動伺服器才能變更。如果在伺服器啟動期間使用了相對路徑,除非 pg_ctl 在與伺服器啟動期間相同的目前目錄中執行,否則 restart 可能會失敗。

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

status 模式檢查伺服器是否在指定的資料目錄中執行。如果是,則伺服器的PID以及用於調用它的命令列選項會顯示出來。如果伺服器未執行,pg_ctl 會傳回退出狀態 3。如果未指定可存取的資料目錄,pg_ctl 會傳回退出狀態 4。

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

logrotate 模式輪替伺服器日誌檔。有關如何將此模式與外部日誌輪替工具一起使用的詳細資訊,請參閱Section 24.3

kill 模式將訊號發送到指定的程序。這在沒有內建 kill 命令的 Microsoft Windows 上尤其有用。使用 --help 可以查看支援的訊號名稱清單。

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

unregister 模式取消註冊 Microsoft Windows 上的系統服務。這會撤銷 register 命令的效果。

選項

-c
--core-files

嘗試允許伺服器崩潰產生核心檔案,在可能的平台上,透過解除對核心檔案施加的任何軟資源限制。這在除錯或診斷問題時很有用,允許從失敗的伺服器程序中取得堆疊追蹤。

-D datadir
--pgdata=datadir

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

-l filename
--log=filename

將伺服器日誌輸出附加到 filename。如果該檔案不存在,則會建立該檔案。umask 設定為 077,因此預設情況下禁止其他使用者存取日誌檔案。

-m mode
--mode=mode

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

-o options
--options=options

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

The options should usually be surrounded by single or double quotes to ensure that they are passed through as a group.

-o initdb-options
--options=initdb-options

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

The initdb-options should usually be surrounded by single or double quotes to ensure that they are passed through as a group.

-p path

指定 postgres 可執行檔的位置。預設情況下,postgres 可執行檔取自與 pg_ctl 相同的目錄,如果找不到,則取自硬式編碼的安裝目錄。除非您正在執行一些不尋常的操作並且收到找不到 postgres 可執行檔的錯誤,否則不需要使用此選項。

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

-s
--silent

僅印出錯誤,不印出資訊性訊息。

-t seconds
--timeout=seconds

指定等待操作完成時的最大等待秒數(請參閱選項 -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 source

當作為 Windows 服務執行時,pg_ctl 用於記錄到事件日誌的事件來源名稱。預設值為 PostgreSQL。請注意,這只會控制從 pg_ctl 本身傳送的訊息;伺服器啟動後,將會使用其 event_source 參數指定的事件來源。如果伺服器在啟動過程中很早就失敗,且在該參數設定之前,它也可能會使用預設事件來源名稱 PostgreSQL 來記錄。

-N servicename

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

-P password

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

-S start-type

系統服務的啟動類型。start-type 可以是 autodemand,或是這兩者之一的第一個字母。如果省略此選項,則預設值為 auto

-U username

用於執行服務的使用者名稱。對於網域使用者,請使用 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"

第二行是在重新啟動模式下會叫用的命令。

另請參閱

initdbpostgres

提交更正

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