PostgreSQL7.0手冊(cè)-用戶(hù)手冊(cè)-21. 系統(tǒng)應(yīng)用 - postmaster
2019-09-08 23:33:57
供稿:網(wǎng)友
postmaster
名稱(chēng)
postmaster ― 運(yùn)行 Postgres 多用戶(hù)后端
語(yǔ)法
postmaster [ -B nBuffers ] [ -D DataDir ] [ -N maxBackends ] [ -S ]
[ -d DebugLevel ] [ -i ] [ -l ]
[ -o BackendOptions ] [ -p port ] [ -n | -s ]
輸入
postmaster 接受下列命令行參數(shù):
-B nBuffers
postmaster 為它啟動(dòng)的后端進(jìn)程分配和管理的共享內(nèi)存緩沖區(qū)數(shù)量。此值缺省為 64 個(gè)緩沖區(qū),每個(gè)緩沖區(qū)是 8k 字節(jié)(或者 config.h 里設(shè)置的 BLCKSZ 大小)。
-D DataDir
聲明用做數(shù)據(jù)庫(kù)目錄樹(shù)的根的目錄。如果沒(méi)有給出 -D,缺省目錄名是環(huán)境變量 PGDATA 的值。如果沒(méi)有設(shè)置 PGDATA,那么使用的目錄是 $POSTGRESHOME/data。如果兩個(gè)環(huán)境變量和命令行選項(xiàng)都沒(méi)有給出,用的缺省目錄是編譯時(shí)設(shè)置的。
-N maxBackends
此 postmaster 允許啟動(dòng)的后端服務(wù)器的最大數(shù)目。缺省配置時(shí),該值為 32,如果你的系統(tǒng)能支持更多進(jìn)程,該值最大可以設(shè)置為 1024。缺省值和最大值都可以在制作 Postgres 時(shí)修改(參閱 src/include/config.h)。
-S
指明 postmaster 進(jìn)程將以安靜模式啟動(dòng)。也就是說(shuō),它將與用戶(hù)的(控制)tty 脫離并且啟動(dòng)其自身的進(jìn)程組。這個(gè)選項(xiàng)不應(yīng)和調(diào)試選項(xiàng)結(jié)合使用,因?yàn)橄驑?biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤打印的任何信息都被丟棄。
請(qǐng)注意使用這個(gè)開(kāi)關(guān)會(huì)令除錯(cuò)非常困難,因?yàn)橥ǔS蛇@個(gè) postmaster 和它生成的后代產(chǎn)生的跟蹤和日志信息都將被丟棄.
-d DebugLevel
決定后端服務(wù)器將產(chǎn)生的調(diào)試信息輸出的數(shù)量。如果 DebugLevel 是一,將跟蹤所有聯(lián)接動(dòng)作,而對(duì)其它的一律忽略。對(duì)于級(jí)別二或更高,后端進(jìn)程的調(diào)試被打開(kāi)并且 postmaster 顯示更多信息,包括后端環(huán)境和處理動(dòng)作。注意如果沒(méi)有給后端服務(wù)器聲明他們的調(diào)試輸出指向的文件,則輸出會(huì)出現(xiàn)在它們的父postmaster 的控制 tty 上。
-i
這個(gè)選項(xiàng)打開(kāi) TCP/IP 或者網(wǎng)際域套接字通訊。沒(méi)有這個(gè)選項(xiàng),只能進(jìn)行本地 Unix 域套接字通訊。
-l
這個(gè)選項(xiàng)打開(kāi) SSL 套接字通訊。同樣還需要 -i 選項(xiàng)。要使用這個(gè)選項(xiàng),編譯時(shí)你必須打開(kāi)了 SSL 選項(xiàng)。
-o BackendOptions
在 BackendOptions 里聲明的 postgres 選項(xiàng)都傳遞給所有由這個(gè) postmaster 啟動(dòng)的后端服務(wù)進(jìn)程。如果選項(xiàng)字串包含任何空白,整個(gè)字串必須引起來(lái)。
-p port
聲明 postmaster 偵聽(tīng)著等待連接的互聯(lián)網(wǎng) TCP/IP 端口或一個(gè)本地 Unix 域套接字文件擴(kuò)展(描述符).缺省的端口號(hào)是環(huán)境變量 PGPORT 的值。如果沒(méi)有設(shè)置 PGPORT,缺省是 Postgres 編譯時(shí)建立的值(通常是 5432)。如果你聲明了一個(gè)非缺省端口,那么所有前端應(yīng)用(包括psql)都必須用命令行選項(xiàng)或者 PGPORT 聲明同一個(gè)端口。
還有幾個(gè)命令行選項(xiàng)用于在后端非正常退出時(shí)進(jìn)行調(diào)試。這些選項(xiàng)用于在這種情況下控制postmaster,而且沒(méi)有一個(gè)選項(xiàng)是為了用于正常操作的。
用于這種狀況的一般策略是通知所有其它后端必須退出,然后重新初始化共享內(nèi)存和信號(hào)燈。這是因?yàn)橐粋€(gè)出錯(cuò)的后端在退出前可能已經(jīng)破壞了一些共享的狀態(tài)。
這些特殊選項(xiàng)是:
-n
postmaster 將不會(huì)重新初始化共享數(shù)據(jù)結(jié)構(gòu)。一個(gè)有經(jīng)驗(yàn)的系統(tǒng)程序員這時(shí)就可以使用shmemdoc 程序檢查共享內(nèi)存和信號(hào)燈狀態(tài)。
-s
postmaster 將通過(guò)發(fā)送信號(hào) SIGSTOP 停止所有其他后端進(jìn)程,但不會(huì)導(dǎo)致它們退出。這樣就允許系統(tǒng)程序員手工從所有后端進(jìn)程收集傾倒的核心(core dumps)。
輸出
semget: No space left on device
如果你看到這條信息,你應(yīng)該運(yùn)行 ipcclean 命令。干完這個(gè)之后,試著重新啟動(dòng) postmaster。如果還不行,你可能需要按照安裝指導(dǎo)里描述的那樣配置你的內(nèi)核的共享內(nèi)存和信號(hào)燈。如果你在一臺(tái)主機(jī)上運(yùn)行多個(gè)postmaster 實(shí)例,或者如果你的內(nèi)核的共享內(nèi)存和/或信號(hào)燈被限制得很小,你可能要重新配置你的內(nèi)核以增加共享內(nèi)存和信號(hào)燈參數(shù)。
小技巧:你也可以通過(guò)降低 -B 的參數(shù)以減少 Postgres 的共享內(nèi)存的消耗,或者降低 -N 的參數(shù)減少 Postgres 的信號(hào)燈的消耗,以此可以推遲重新配置內(nèi)核。
StreamServerPort: cannot bind to port
如果看到這樣的信息,你應(yīng)該確保沒(méi)有其他的postmaster 進(jìn)程正在運(yùn)行。判斷這個(gè)情況的最簡(jiǎn)單的辦法是使用命令
% ps -ax | grep postmaster
(這是在 BSD 類(lèi)型的系統(tǒng)上),或者
% ps -e | grep postmast
(這是在 System V 類(lèi)型或者 POSIX 兼容的系統(tǒng)象 HP-UX 上)。
如果你確信沒(méi)有其他 postmaster 進(jìn)程在運(yùn)行但是你還是收到這個(gè)錯(cuò)誤信息,試著用 -p 選項(xiàng)聲明一個(gè)不同的端口。如果你終止 postmaster 后又馬上用同一個(gè)端口運(yùn)行它,你也有可能得到這個(gè)錯(cuò)誤信息;這時(shí),你必須多等幾秒,等操作系統(tǒng)關(guān)閉了該端口后再試。最后如果你使用了一個(gè)操作系統(tǒng)認(rèn)為是保留的端口,也可能導(dǎo)致這個(gè)錯(cuò)誤信息。例如,我的 Unix 版本認(rèn)為低于 1024 的端口號(hào)是可信任的因而只有 Unix 超級(jí)用戶(hù)可以使用它們。
IpcMemoryAttach: shmat() failed: Permission denied
一個(gè)可能的解釋是另外一個(gè)用戶(hù)企圖在同一端口上運(yùn)行一個(gè)postmaster 進(jìn)程,該進(jìn)程請(qǐng)求共享資源然后退出。因?yàn)椤ostgres 的共享內(nèi)存鍵是以賦予 postmaster 的端口號(hào)為基礎(chǔ)的,因此在同一臺(tái)主機(jī)上有好幾個(gè)安裝的話(huà)很有可能沖突。如果當(dāng)前沒(méi)有其他postmaster 進(jìn)程正在運(yùn)行(見(jiàn)上面),運(yùn)行 ipcclean 然后再?lài)L試一下。如果其他 postmaster 鏡象正在運(yùn)行,你就不得不與那些進(jìn)程的所有者協(xié)調(diào)端口號(hào)的分配和/或刪除未用的共享內(nèi)存段。
描述
postmaster 管理前端和后端進(jìn)程之間的通訊,還負(fù)責(zé)分配共享緩沖池和 SysV 信號(hào)燈(在沒(méi)有測(cè)試和設(shè)置指令的機(jī)器上)。postmaster 本身并不與用戶(hù)交互并且應(yīng)該作為一個(gè)后臺(tái)進(jìn)程啟動(dòng)。
每個(gè) Postgres 安裝每次應(yīng)該只啟動(dòng)一個(gè) postmaster。這里,一個(gè)安裝意味著一個(gè)數(shù)據(jù)庫(kù)目錄和postmaster 端口號(hào)。你可以在一臺(tái)機(jī)器上運(yùn)行多于一個(gè) postmaster,前提是每個(gè)有不同的目錄和端口號(hào)。
注意
如果有可能,不要使用 SIGKILL 殺死 postmaster。而應(yīng)該使用 SIGHUP,SIGINT 或 SIGTERM (kill(1)的缺省信號(hào))。用
% kill -KILL
或者其可選形式
% kill -9
會(huì)阻止 postmaster 在退出前釋放它持有的系統(tǒng)資源(例如共享內(nèi)存和信號(hào)燈)。這樣就無(wú)法讓你免于處理上面描述的共享內(nèi)存的問(wèn)題。
處理共享內(nèi)存問(wèn)題的有用的工具包括 ipcs(1),ipcrm(1),和ipcclean(1)。
用法
用缺省值啟動(dòng) postmaster 鍵入:
% nohup postmaster >logfile 2>&1 &
這條命令將在缺省端口(5432)啟動(dòng) postmaster。這是最簡(jiǎn)單和最常用的啟動(dòng)postmaster 的方法。
要在指定的端口啟動(dòng) postmaster :
% nohup postmaster -p 1234 &
這條命令將啟動(dòng)通過(guò)端口1234通訊的 postmaster。為了用 psql 與這個(gè) postmaster 聯(lián)接,你需要這樣運(yùn)行(psql):
% psql -p 1234
或者設(shè)置環(huán)境變量 PGPORT:
% setenv PGPORT 1234
% psql