postgres — PostgreSQL 資料庫伺服器
postgres
[option
...]
postgres
是 PostgreSQL 資料庫伺服器。為了讓客戶端應用程式存取資料庫,它會(透過網路或本地端)連接到正在執行的 postgres
實例。然後 postgres
實例會啟動一個單獨的伺服器進程來處理連線。
一個 postgres
實例總是管理一個資料庫叢集的資料。資料庫叢集是一組資料庫,儲存在一個共用的檔案系統位置(「資料區域」)。只要它們使用不同的資料區域和不同的通訊埠(見下文),多個 postgres
實例就可以在系統上同時執行。postgres
啟動時需要知道資料區域的位置。該位置必須由 -D
選項或 PGDATA
環境變數指定;沒有預設值。通常,-D
或 PGDATA
直接指向由 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_size、shared_memory_size_in_huge_pages 和 wal_segment_size)。
此選項適用於與伺服器實例互動的其他程式,例如 pg_ctl,用於查詢組態參數值。面向使用者的應用程式應改用 SHOW
或 pg_settings
檢視。
-d debug-level
設定除錯層級。此值設定越高,寫入伺服器日誌的除錯輸出就越多。數值從 1 到 5。也可以傳遞 -d 0
給特定連線階段,這會防止父程序 postgres
的伺服器日誌層級傳遞到此連線階段。
-D datadir
指定資料庫組態檔案的檔案系統位置。詳情請參閱第 19.2 節。
-e
將預設日期格式設定為“European”,也就是輸入日期欄位的 DMY
順序。這也會導致在某些日期輸出格式中,日期印在月份之前。詳情請參閱第 8.5 節。
-F
停用 fsync
呼叫以提高效能,但可能會在系統崩潰時導致資料損毀。指定此選項等同於停用 fsync 組態參數。在使用之前,請仔細閱讀相關文件!
-h hostname
指定 postgres
要監聽來自用戶端應用程式之 TCP/IP 連線的 IP 主機名稱或位址。此值也可以是逗號分隔的位址清單,或是 *
以指定監聽所有可用的介面。空值表示不監聽任何 IP 位址,在這種情況下,只能使用 Unix 網域 socket 連接到伺服器。預設為僅監聽 localhost。指定此選項等同於設定 listen_addresses 組態參數。
-i
允許遠端用戶端透過 TCP/IP (網際網路網域) 連線連線。如果沒有此選項,則只會接受本地連線。此選項等同於在 postgresql.conf
中或透過 -h
將 listen_addresses
設定為 *
。
此選項已被棄用,因為它不允許存取 listen_addresses 的完整功能。通常最好直接設定 listen_addresses
。
-k directory
指定 postgres
要監聽來自用戶端應用程式之連線的 Unix 網域 socket 目錄。此值也可以是逗號分隔的目錄清單。空值表示不監聽任何 Unix 網域 socket,在這種情況下,只能使用 TCP/IP socket 連接到伺服器。預設值通常是 /tmp
,但可以在建置時變更。指定此選項等同於設定 unix_socket_directories 組態參數。
-l
啟用使用以下技術的安全連線SSL。PostgreSQL 必須在編譯時支援SSL,才能使用此選項。有關使用SSL的更多資訊,請參閱第 18.9 節。
-N max-connections
設定此伺服器將接受的最大用戶端連線數。此參數的預設值由 initdb 自動選擇。指定此選項等同於設定 max_connections 組態參數。
-p port
指定 postgres
要監聽來自用戶端應用程式之連線的 TCP/IP 連接埠或本機 Unix 網域 socket 檔案擴充名。預設為 PGPORT
環境變數的值,如果未設定 PGPORT
,則預設為編譯期間建立的值(通常為 5432)。如果您指定預設連接埠以外的連接埠,則所有用戶端應用程式都必須使用命令列選項或 PGPORT
指定相同的連接埠。
-s
在每個命令結束時印出時間資訊和其他統計資料。這對於效能評估或用於調整緩衝區數量很有用。
-S
work-mem
指定在重新使用暫存磁碟檔案之前,排序和雜湊表要使用的基本記憶體量。請參閱第 19.4.1 節中 work_mem
組態參數的說明。
-V
--version
印出 postgres 版本並結束。
--name
=value
設定具名的執行階段參數;是 -c
的較短形式。
--describe-config
此選項以 Tab 分隔的 COPY
格式傾印伺服器的內部組態變數、說明和預設值。它主要用於管理工具。
-?
--help
顯示有關 postgres 命令列引數的說明,並結束。
此處描述的選項主要用於除錯目的,在某些情況下,用於協助復原嚴重損壞的資料庫。在生產資料庫設定中沒有理由使用它們。此處僅列出供 PostgreSQL 系統開發人員使用。此外,這些選項可能會在未來的版本中更改或移除,恕不另行通知。
-f
{ s | i | o | b | t | n | m | h }
禁止使用特定的掃描和聯結方法:s
和 i
分別停用循序掃描和索引掃描,o
、b
和 t
分別停用僅索引掃描、點陣圖索引掃描和 TID 掃描,而 n
、m
和 h
分別停用巢狀迴圈、合併和雜湊聯結。
循序掃描和巢狀迴圈聯結都不能完全停用;-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
預設連接埠號碼(最好在組態檔案中設定)
提到 semget
或 shmget
的失敗訊息可能表示您需要組態您的核心,以提供足夠的共享記憶體和訊號標。如需更多討論,請參閱第 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
伺服器,可以使用訊號 SIGTERM
、SIGINT
或 SIGQUIT
。第一個訊號將在退出之前等待所有客戶端終止,第二個訊號將強制斷開所有客戶端的連線,第三個訊號將立即退出而不進行適當的關閉,從而在重新啟動期間導致回復執行。
SIGHUP
訊號將重新載入伺服器組態檔案。也可以將 SIGHUP
傳送到個別伺服器程序,但這通常是不明智的。
要取消正在執行的查詢,請將 SIGINT
訊號傳送到執行該命令的程序。要乾淨地終止後端程序,請將 SIGTERM
傳送到該程序。另請參閱第 9.28.2 節中的 pg_cancel_backend
和 pg_terminate_backend
,它們是這兩個動作的 SQL 可呼叫對應項。
postgres
伺服器使用 SIGQUIT
來告知從屬伺服器程序終止而不進行正常清理。此訊號 不應 由使用者使用。將 SIGKILL
傳送到伺服器程序也是不明智的 — 主要的 postgres
程序會將其解釋為崩潰,並將強制所有同級程序退出,作為其標準崩潰回復程序的一部分。
--
選項在 FreeBSD 或 OpenBSD 上無效。請改用 -c
。這是受影響的作業系統中的錯誤;如果未修復,則 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 &
若要使用特定的端口啟動 postgres
,例如 1234
$
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
中的設定可能比依賴命令列參數來設定參數更好。
如果您在文件中看到任何不正確、與特定功能的經驗不符或需要進一步澄清的內容,請使用此表單來回報文件問題。