postmaster

Name

postmaster -- PostgreSQL多用戶數據庫服務器

Synopsis

postmaster [-A 0 | 1 ] [-B nbuffers] [-c name=value] [-d debug-level] [-D datadir] [-F] [-h hostname] [-i] [-k directory] [-l] [-N max-connections] [-o extra-options] [-p port] [-S] [--name=value] [-n | -s]

描述

postmasterPostgreSQL 多用戶數據庫服務器。 一個客戶端為了訪問一個數據庫,它(通過網絡或本地)聯接到一個運行著的 postmaster。 然後該 postmaster 啟動一個獨立的服務器進程("postgres") 以操作聯接。 postmaster 還控制服務器進程之間的通訊。

缺省時postmaster在前台啟動並且向標準錯誤系統輸出打印日志信息。 在實際應用裡,postmaster應該作為後台進程啟動,也許該在啟動時。

一個postmaster總是管理來自同一個數據庫集群的數據。 一個數據庫集群是一套在同一個文件系統位置存放數據的數據庫。 當 postmaster 啟動時,它需要知道數據庫集群文件("數據區")的位置。 這個參數是通過傳遞 -D 命令行選項或者 PGDATA 環境變量實現的,沒有缺省值。 一個系統上同時可以運行幾個postmaster進程, 只要他們使用不同的數據區和不同的端口號(見下文)。 一個數據區是用 initdb 創建的。

選項

postmaster 接受下列命令行參數。 關于這些選項的更詳細的討論請參考 Section 16.4。 你也可以通過設置一個配置文件來減少敲擊這些選項。

-A 0|1

打開運行時斷言檢查,是檢測編程錯誤的調試幫助。 只有在編譯時打開了它,你才能使用它。如果編譯時打開了,缺省是打開。

-B nbuffers

為服務器進程分配和管理的共享內存緩衝區數量。此值缺省為 64 個緩衝區,每個緩衝區是 8k 字節。

-c name=value

設置一個命名的運行時參數。參考 Section 16.4 獲取列表和描述。 大多數其他命令行選項實際上都是這樣的參數賦值的短形式。 -c 可以出現多次用以設置多個參數。

-d debug-level

設置調試級別。數值越高,寫到服務器日志的調試輸出越多。 數值範圍是 1 到 5。

-D datadir

聲明數據目錄的文件系統路徑。參閱上文的討論。

-F

關閉 fsync 調用,提高性能,但是要冒系統崩潰時數據毀壞的風險。 這個選項對應于在 postgresql.conf 中設置 fsync=false。在使用之前閱讀詳細文檔!

--fsync=true 有著這個選項的反面效果。

-h hostname

聲明 postmaster 偵聽著等待來自前端應用聯接的 TCP 主機名或地址。 它缺省偵聽所有配置了的地址(包括 localhost)。

-i

這個選項打開 TCP/IP (網際域套接字)通訊。 沒有這個選項,只能進行本地 Unix 域套接字通訊。 這個選項等效于在 postgresql.conf 中設置 tcpip-socket=true

--tcpip_socket=false 是這個選項的相反的作用。

-k directory

聲明 postmaster 偵聽著等待來自前端應用聯接的 Unix 域套接字的位置。 缺省通常是 /tmp,但是可以在制作的時候修改。

-l

這個選項打開用 SSL 進行的安全通訊。同樣還需要 -i 選項。要使用這個選項,編譯時你必須打開了 SSL 選項。

-N max-connections

設置postmaster允許啟動的服務器服務器的最大數目。缺省配置時,該值為 32, 如果你的系統能支持更多進程,該值最大可以設置為你的系統所能支持的極限。 時修改(參閱 src/include/config.h)。 (請注意-B選項要求至少是兩倍-N參閱 Section 16.5 獲取有關大客戶量的系統資源需求。)

-o extra-options

extra-options 裡聲明的 postgres 選項都傳遞給所有由這個 postmaster 啟動的服務進程。 參閱 postgres 獲取可能選項。 如果選項字串包含任何空白,整個字串必須引起來。

-p port

聲明 postmaster 偵聽著等待客戶端應用連接的互聯網 TCP/IP 端口或一個本地 Unix 域套接字文件擴展(描述符)。 缺省的端口號是環境變量 PGPORT 的值。如果沒有設置 PGPORT 缺省是 PostgreSQL 編譯時建立的值(通常是 5432)。 如果你聲明了一個非缺省端口,那麼所有前端應用(包括 psql)都必須用命令行選項或者 PGPORT 聲明同一個端口。

-S

指明 postmaster 進程將以安靜模式啟動。也就是說, 它將與用戶的(控制)tty 脫離並且啟動其自身的進程組。 並且它把標準輸出和標準錯誤重定向到 /dev/null

使用這個開關會將日志輸出都丟棄,可能不是你希望的, 因為這樣令錯誤查找非常困難。參閱下文獲取一個在後台啟動 postmaster 的更好的方法。

--silent_mode=false 的作用和這個選項的效果正好相反。

--name=value

設置一個命名的運行時參數;其縮寫形式是 -c

有兩個額外的命令行選項可以用于調試導致服務器異常退出。 用于這種狀況的一般策略是通知所有其它服務器必須退出, 然後重新初始化共享內存和信號燈。這是因為一個出錯的服務器在退出前可能已經破壞了一些共享的狀態。 這些選項控制這種環境下的 postmaster 的性質,而且沒有哪個選項是為普通操作準備的

這些特殊選項是:

-n

postmaster 將不會重新初始化共享數據結構。 一個有經驗的系統程序員這時就可以使用調試器檢查共享內存和信號燈狀態。

-s

postmaster 將通過發送信號SIGSTOP 停止所有其他服務器進程,但不會導致它們退出。 這樣就允許系統程序員手工從所有服務器進程收集傾倒的核心(core dumps)。

環境

PGCLIENTENCODING

客戶端使用的確缺省字符編碼。(客戶端可以獨立地覆蓋這個。)這個值也可以在配置文件裡設置。

PGDATA

缺省數據目錄位置

PGDATESTYLE

運行時參數datestyle的缺省值。(已經不再鼓勵使用環境變量了。)

PGPORT

缺省端口(最好再配置文件中設置)

TZ

服務器時區

其它

其它環境變量可以用于指定可選地數據存儲位置。參閱 Section 18.5 獲取更多信息。

診斷

一個提到了 semget 或者 shmget 的錯誤信息可能意味著你需要配置你的內核, 提供足夠的共享內存和信號燈。更多討論,參閱 Section 16.5

提示: 你也可以通過降低 shared_buffers 的參數以減少 PostgreSQL的共享內存的消耗, 或者降低max_connections的參數減少PostgreSQL的信號燈的消耗, 以此可以推遲重新配置內核。

如果是一個說另外一個 postmaster 正在運行的錯誤信息,那你應該確保沒有其他的 postmaster 進程正在運行。判斷這個情況的最簡單的辦法是使用命令

$ ps ax | grep postmaster

或者

$ ps -e | grep postmaster

具體使用哪種取決于你的系統。如果確信沒有衝突的 postmaster 在運行,那麼你可以刪除消息裡提到的鎖文件然後再次運行。

一個說無法綁定端口的錯誤信息可能表明該端口已經背其它非 PostgreSQL 進程使用。 如果你終止postmaster後又馬上用同一個端口運行它,你也有可能得到這個錯誤信息; 這時,你必須多等幾秒,等操作系統關閉了該端口後再試。 最後,如果你使用了一個操作系統認為是保留的端口,也可能導致這個錯誤信息。 例如,我的 Unix 版本認為低于 1024 的端口號是"可信任的",因而只有 Unix 超級用戶可以使用它們。

注意

如果有可能,不要使用 SIGKILL殺死 postmaster。 這樣會阻止 postmaster在退出前釋放它持有的系統資源(例如共享內存和信號燈)。

要正常結束 postmaster,可以使用信號 SIGTERMSIGINT, 或 SIGQUIT。 第一個信號將等待所有的客戶端退出後才退出。 第二個將強制斷開所有客戶端,而第三個將不停止立刻退出, 導致在重起時的恢復運行。

工具命令 pg_ctl 可以用于安全而有效地啟停 postmaster

--FreeBSD或者 OpenBSD上無法運行。 應該用 -c。這在受影響的系統裡是個臭蟲; 如果這個毛病沒有修補好,將來的 PostgreSQL 版本將提供一個繞開的辦法。

例子

用缺省值在後台啟動postmaster,鍵入:

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

以指定的端口啟動 postmaster

$ postmaster -p 1234

這條命令將在端口 1234 啟動 postmaster。 為了用psql與這個 postmaster 聯接, 你應該這麼運行psql

$ psql -p 1234

或者設置環境變量 PGPORT

$ export PGPORT=1234
$ psql

命名的運行時參數可以用下列的風格之一設置:

$ postmaster -c sort_mem=1234
$ postmaster --sort-mem=1234

兩種形式都覆蓋那些現有的在 postgresql.conf 裡面的 sort_mem 的設置。 請注意在參數名裡的下劃線在命令行上可以寫成下劃線,也可以寫成劃線。

提示: 除了用于短期的實驗以外,更好的習慣是編輯放在 postgresql.conf 裡面的設置, 而不是倚賴命令行開關設置參數。

又見

initdb, pg_ctl