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

postgres

postgres — PostgreSQL 資料庫伺服器

概要

postgres [選項...]

描述

postgresPostgreSQL 資料庫伺服器。為了讓客戶端應用程式能夠訪問資料庫,它會連線(透過網路或本地)到一個正在執行的 postgres 例項。然後 postgres 例項會啟動一個單獨的伺服器程序來處理連線。

一個 postgres 例項始終管理著唯一一個數據庫叢集的資料。資料庫叢集是一組儲存在公共檔案系統位置(即資料區域)的資料庫。一臺系統上可以同時執行多個 postgres 例項,只要它們使用不同的資料區域和不同的通訊埠(見下文)。當 postgres 啟動時,它需要知道資料區域的位置。該位置必須由 -D 選項或 PGDATA 環境變數指定;沒有預設值。通常,-DPGDATA 指向由 initdb 建立的資料區域目錄。其他可能的檔案佈局將在 第 19.2 節 中討論。

預設情況下,postgres 在前臺啟動,並將日誌訊息列印到標準錯誤流。在實際應用中,postgres 應該作為後臺程序啟動,可能在系統啟動時啟動。

postgres 命令也可以以單使用者模式呼叫。該模式的主要用途是 initdb 進行引導時的使用。有時也用於除錯或災難恢復;請注意,執行單使用者伺服器並不真正適合除錯伺服器,因為它不會發生真實的程序間通訊和鎖定。當從 shell 以單使用者模式呼叫時,使用者可以輸入查詢,查詢結果將列印到螢幕上,但其格式對開發人員比終端使用者更有用。在單使用者模式下,會話使用者將被設定為使用者 ID 為 1 的使用者,並授予該使用者隱含的超級使用者許可權。該使用者實際上不必存在,因此單使用者模式可用於手動恢復某些型別的系統目錄意外損壞。

選項

postgres 接受以下命令列引數。有關選項的詳細討論,請參閱 第 19 章。您可以透過設定配置檔案來節省輸入大多數這些選項的時間。一些(安全)選項也可以從連線的客戶端以應用程式相關的方式設定,僅適用於該會話。例如,如果設定了環境變數 PGOPTIONS,則基於 libpq 的客戶端會將該字串傳遞給伺服器,伺服器會將其解釋為 postgres 命令列選項。

通用選項

-B nbuffers

設定伺服器程序使用的共享緩衝區數量。此引數的預設值由 initdb 自動選擇。指定此選項等同於設定 shared_buffers 配置引數。

-c name=value

設定一個命名的執行時引數。 PostgreSQL 支援的配置引數在 第 19 章 中進行了描述。大多數其他命令列選項實際上是這種引數賦值的簡寫形式。 -c 可以多次出現以設定多個引數。

-C name

列印命名的執行時引數的值,然後退出。(有關詳細資訊,請參見上面的 -c 選項。)這將返回 postgresql.conf 的值,並帶有本次呼叫中提供的引數的修改。它不反映叢集啟動時提供的引數。

對於大多數引數,這可以用於正在執行的伺服器。但是,對於某些執行時計算的引數(例如 shared_memory_sizeshared_memory_size_in_huge_pageswal_segment_size),必須關閉伺服器。

此選項用於與伺服器例項互動的其他程式,例如 pg_ctl,以查詢配置引數值。面向使用者的應用程式應改用 SHOWpg_settings 檢視。

-d debug-level

設定除錯級別。此值設定得越高,寫入伺服器日誌的除錯輸出就越多。值為 1 到 5。也可以為特定會話傳遞 -d 0,這將阻止父 postgres 程序的伺服器日誌級別傳播到此會話。

-D datadir

指定資料庫配置檔案在檔案系統中的位置。有關詳細資訊,請參閱 第 19.2 節

-e

將預設日期樣式設定為歐洲,即輸入日期欄位的 DMY 順序。這也會導致在某些日期輸出格式中,日期顯示在月份之前。有關更多資訊,請參閱 第 8.5 節

-F

停用 fsync 呼叫以提高效能,但存在系統崩潰時資料損壞的風險。指定此選項等同於停用 fsync 配置引數。使用此選項之前請閱讀詳細文件!

-h hostname

指定 postgres 要監聽來自客戶端應用程式的 TCP/IP 連線的 IP 主機名或地址。該值也可以是逗號分隔的地址列表,或者 * 表示監聽所有可用介面。空值表示不監聽任何 IP 地址,在這種情況下,只能使用 Unix 域套接字連線到伺服器。預設監聽 localhost。指定此選項等同於設定 listen_addresses 配置引數。

-i

允許遠端客戶端透過 TCP/IP(Internet 域)連線。沒有此選項,只接受本地連線。此選項等同於在 postgresql.conf 中或透過 -h 設定 *listen_addresses

此選項已棄用,因為它不允許訪問 listen_addresses 的全部功能。通常最好直接設定 listen_addresses

-k directory

指定 postgres 要監聽來自客戶端應用程式連線的 Unix 域套接字目錄。該值也可以是逗號分隔的目錄列表。空值表示不監聽任何 Unix 域套接字,在這種情況下,只能使用 TCP/IP 套接字連線到伺服器。預設值通常是 /tmp,但這可以在編譯時更改。指定此選項等同於設定 unix_socket_directories 配置引數。

-l

啟用使用SSL的安全連線。 PostgreSQL 必須使用支援SSL編譯才能使用此選項。有關使用SSL的更多資訊,請參閱 第 18.9 節

-N max-connections

設定此伺服器將接受的最大客戶端連線數。此引數的預設值由 initdb 自動選擇。指定此選項等同於設定 max_connections 配置引數。

-p port

指定 postgres 要監聽來自客戶端應用程式連線的 TCP/IP 埠或本地 Unix 域套接字副檔名。預設值為 PGPORT 環境變數的值,如果 PGPORT 未設定,則預設為編譯時設定的值(通常為 5432)。如果指定了非預設埠,則所有客戶端應用程式都必須使用命令列選項或 PGPORT 指定相同的埠。

-s

在每個命令結束時列印時間資訊和其他統計資訊。這對於基準測試或調整緩衝區數量很有用。

-S work-mem

指定在訴諸臨時磁碟檔案之前,用於排序和雜湊表的記憶體基準量。請參閱 第 19.4.1 節work_mem 配置引數的描述。

-V
--version

列印 postgres 版本並退出。

--name=value

設定一個命名的執行時引數; -c 的簡寫形式。

--describe-config

此選項以製表符分隔的 COPY 格式轉儲伺服器的內部配置變數、描述和預設值。它主要用於管理工具。

-?
--help

顯示有關 postgres 命令列引數的幫助資訊,然後退出。

半內部選項

這裡描述的選項主要用於除錯目的,有時用於協助恢復嚴重損壞的資料庫。在生產資料庫設定中沒有理由使用它們。這裡列出它們僅供 PostgreSQL 系統開發人員使用。此外,這些選項可能會在未來的版本中更改或刪除,恕不另行通知。

-f { s | i | o | b | t | n | m | h }

禁止使用特定的掃描和連線方法: si 分別停用順序掃描和索引掃描,obt 分別停用僅索引掃描、點陣圖索引掃描和 TID 掃描,而 nmh 分別停用巢狀迴圈連線、合併連線和雜湊連線。

順序掃描和巢狀迴圈連線都不能完全停用;-fs-fn 選項只是阻止最佳化器在有其他選擇時使用那些計劃型別。

-O

允許修改系統表的結構。這由 initdb 使用。

-P

讀取系統表時忽略系統索引,但在修改表時仍然更新索引。這在從損壞的系統索引恢復時很有用。

-t pa[rser] | pl[anner] | e[xecutor]

列印與主要系統模組相關的每個查詢的計時統計資訊。此選項不能與 -s 選項一起使用。

-T

此選項用於除錯導致伺服器程序異常終止的問題。在這種情況下,常規策略是透過傳送 SIGQUIT 訊號來通知所有其他伺服器程序它們必須終止。使用此選項時,將傳送 SIGABRT,從而生成核心轉儲檔案。

-v protocol

指定特定會話要使用的前端/後端協議的版本號。此選項僅供內部使用。

-W seconds

當啟動一個新的伺服器程序時,在此之後會發生此秒數的延遲,它會進行身份驗證過程。這旨在為連線偵錯程式到伺服器程序提供機會。

單使用者模式選項

以下選項僅適用於單使用者模式(參見下面的 單使用者模式)。

--single

選擇單使用者模式。這必須是命令列上的第一個引數。

database

指定要訪問的資料庫的名稱。這必須是命令列上的最後一個引數。如果省略,則預設為使用者名稱。

-E

在執行之前將所有命令回顯到標準輸出。

-j

使用分號後跟兩個換行符,而不是單獨的換行符,作為命令輸入終止符。

-r filename

將所有伺服器日誌輸出傳送到 filename。僅當作為命令列選項提供時,此選項才會被接受。

環境變數

PGCLIENTENCODING

客戶端使用的預設字元編碼。(客戶端可以單獨覆蓋此設定。)此值也可以在配置檔案中設定。

PGDATA

預設資料目錄位置

PGDATESTYLE

DateStyle 執行時引數的預設值。(此環境變數的使用已棄用。)

PGPORT

預設埠號(最好在配置檔案中設定)

診斷

提及 semgetshmget 的失敗訊息可能表明您需要配置核心以提供足夠的共享記憶體和訊號量。有關更多討論,請參閱 第 18.4 節。您可以透過降低 shared_buffers 來減少 PostgreSQL 的共享記憶體消耗,和/或透過降低 max_connections 來減少訊號量消耗,從而推遲重新配置核心。

建議檢查一條提示另一臺伺服器已在執行的訊息,例如使用命令

$ ps ax | grep postgres

$ ps -ef | grep postgres

取決於您的系統。如果您確定沒有衝突的伺服器在執行,可以刪除訊息中提到的鎖定檔案,然後重試。

提示無法繫結到埠的失敗訊息可能表明該埠已被非 PostgreSQL 程序佔用。如果您終止 postgres 並立即使用同一埠重新啟動它,也可能收到此錯誤;在這種情況下,您只需等待幾秒鐘,直到作業系統關閉該埠,然後再嘗試。最後,如果您指定了作業系統認為保留的埠號,也可能收到此錯誤。例如,許多 Unix 版本認為 1024 以下的埠號是受信任的,只允許 Unix 超級使用者訪問。

註釋

實用程式 pg_ctl 可用於安全舒適地啟動和關閉 postgres 伺服器。

如果可能,請不要使用 SIGKILL 殺死主 postgres 伺服器。這樣做將阻止 postgres 在終止前釋放它佔用的系統資源(例如,共享記憶體和訊號量)。這可能會導致啟動新的 postgres 執行出現問題。

要正常終止 postgres 伺服器,可以使用 SIGTERMSIGINTSIGQUIT 訊號。第一個訊號將等待所有客戶端終止後再退出,第二個訊號將強制斷開所有客戶端,第三個訊號將立即退出而不進行正常關閉,導致在重啟期間進行恢復執行。

SIGHUP 訊號將重新載入伺服器配置檔案。也可以將 SIGHUP 傳送給單個伺服器程序,但這通常沒有意義。

要取消正在執行的查詢,請向執行該命令的程序傳送 SIGINT 訊號。要乾淨地終止後端程序,請向該程序傳送 SIGTERM。有關這兩個操作的 SQL 可呼叫等價項,請參閱 第 9.28.2 節 中的 pg_cancel_backendpg_terminate_backend

postgres 伺服器使用 SIGQUIT 來告訴從屬伺服器程序在沒有正常清理的情況下終止。使用者不應使用此訊號。將 SIGKILL 傳送給伺服器程序也是不明智的——主 postgres 程序會將其解釋為崩潰,並作為其標準崩潰恢復過程的一部分強制所有子程序退出。

Bug

-- 選項在 FreeBSDOpenBSD 上無效。請改用 -c。這是受影響作業系統的一個 bug;如果此問題未修復,未來版本的 PostgreSQL 將提供一個解決方法。

單使用者模式

要啟動單使用者模式伺服器,請使用類似如下的命令:

postgres --single -D /usr/local/pgsql/data other-options my_database

使用 -D 提供資料庫目錄的正確路徑,或確保 PGDATA 環境變數已設定。還要指定您要使用的特定資料庫的名稱。

通常,單使用者模式伺服器將換行符視為命令輸入終止符;不像 psql 那樣有關於分號的智慧處理。要跨越多行繼續命令,必須在每個換行符(最後一個除外)之前鍵入反斜槓。反斜槓和相鄰的換行符都會從輸入命令中刪除。請注意,即使在字串文字或註釋中也會發生這種情況。

但是,如果您使用 -j 命令列開關,則單個換行符不會終止命令輸入;相反,分號-換行符-換行符序列會終止命令輸入。也就是說,鍵入一個分號,緊接著一個完全空白的行。在這種模式下,反斜槓-換行符不會被特殊處理。同樣,在字串文字或註釋中出現這種序列時也沒有智慧處理。

在這兩種輸入模式下,如果您鍵入一個分號,但它不是緊挨著命令輸入終止符之前或不是命令輸入終止符的一部分,那麼它被視為命令分隔符。當您鍵入命令輸入終止符時,您輸入的多個語句將作為一個事務執行。

要退出會話,請鍵入EOF(通常是 Control+D)。如果您自上一個命令輸入終止符以來輸入了任何文字,那麼EOF將被視為命令輸入終止符,並且需要另一個EOF才能退出。

請注意,單使用者模式伺服器不提供複雜的行編輯功能(例如,沒有命令歷史記錄)。單使用者模式也不執行任何後臺處理,例如自動檢查點或複製。

示例

要以後臺模式啟動 postgres 並使用預設值,請輸入:

$ nohup postgres >logfile 2>&1 </dev/null &

要使用特定埠(例如 1234)啟動 postgres

$ postgres -p 1234

要使用 psql 連線到此伺服器,請使用 -p 選項指定此埠:

$ psql -p 1234

或設定環境變數 PGPORT

$ export PGPORT=1234
$ psql

命名執行時引數可以透過以下任一方式設定:

$ postgres -c work_mem=1234
$ postgres --work-mem=1234

這兩種形式都將覆蓋 postgresql.conf 中可能存在的 work_mem 設定。請注意,引數名稱中的下劃線可以在命令列中寫成下劃線或破折號。除了短期實驗外,最好在 postgresql.conf 中編輯設定,而不是依賴命令列開關來設定引數。

另請參閱

initdbpg_ctl

提交更正

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