?
? ????? PHP ??? ???? ??? ?? ??
postgres [option...]
postgres是PostgreSQL數(shù)據(jù)庫服務(wù)器。 客戶端應(yīng)用程序?yàn)榱嗽L問數(shù)據(jù)庫,將通過TCP Socket或Unix domain socket連接到一個運(yùn)行中的postgres實(shí)例。 然后該postgres實(shí)例將啟動(fork)一個新的、獨(dú)立的服務(wù)器進(jìn)程來處理這個連接。
一個postgres總是管理來自同一個數(shù)據(jù)庫集群的數(shù)據(jù)。一個數(shù)據(jù)庫集群是一組在同一個文件系統(tǒng)位置("數(shù)據(jù)區(qū)")存放數(shù)據(jù)的數(shù)據(jù)庫。 一個系統(tǒng)上可以同時運(yùn)行多個postgres實(shí)例,只要他們使用不同的數(shù)據(jù)區(qū)和不同的端口號(見下文)。 postgres啟動時需要知道數(shù)據(jù)區(qū)的位置,該位置必須通過-D選項(xiàng)或PGDATA環(huán)境變量指定。 通常,-D或PGDATA都直接指向由initdb創(chuàng)建的集群目錄。其他可能的文件布局在Section 18.2里面有討論。
缺省時postgres在前臺啟動并將日志信息輸出到標(biāo)準(zhǔn)錯誤。 但在實(shí)際應(yīng)用中,postgres應(yīng)當(dāng)作為后臺進(jìn)程啟動,而且多數(shù)是在系統(tǒng)啟動時自動啟動。
postgres還能以單用戶模式運(yùn)行。這種用法的主要用于initdb的初始化過程中。 有時候它也被用于調(diào)試災(zāi)難性恢復(fù)。不過,單用戶模式運(yùn)行的服務(wù)器并不適合于調(diào)試, 因?yàn)闆]有實(shí)際的進(jìn)程間通訊和鎖動作發(fā)生。當(dāng)從shell上以單用戶模式調(diào)用時, 用戶可以輸入查詢,然后結(jié)果會在屏幕上以一種更適合開發(fā)者閱讀(不適合普通用戶)的格式顯示出來。 在單用戶模式下,將把會話用戶ID設(shè)為1并賦予超級用戶權(quán)限。 該用戶不必實(shí)際存在,因此單用戶模式運(yùn)行的服務(wù)器可以用于對某些意外損壞的系統(tǒng)表進(jìn)行手工恢復(fù)。
postgres接受下列命令行參數(shù)。關(guān)于這些選項(xiàng)的更詳細(xì)討論請參考Chapter 18。你也可以通過設(shè)置一個配置文件來減少敲擊這些選項(xiàng)。 有些(安全的)選項(xiàng)還可以從連接過來的客戶端設(shè)置,以一種應(yīng)用無關(guān)的方法僅對該會話生效。 比如,如果設(shè)置了PGOPTIONS環(huán)境變量,那么基于libpq的客戶端就都把那個字符串傳遞給服務(wù)器, 并被服務(wù)器解釋成postgres命令行選項(xiàng)。
打開運(yùn)行時斷言檢查,是檢測編程錯誤的調(diào)試幫助。 只有在編譯PostgreSQL時打開了它,你才能使用它。如果編譯時打開了,缺省是打開。
為服務(wù)器進(jìn)程分配和管理的共享內(nèi)存緩沖區(qū)數(shù)量。 這個參數(shù)的缺省值是initdb自動選擇的。 聲明這個選項(xiàng)相當(dāng)于設(shè)置shared_buffers配置參數(shù)。
設(shè)置一個命名的運(yùn)行時參數(shù)。PostgreSQL 支持的配置參數(shù)在Chapter 187里描述。 大多數(shù)其它命令行選項(xiàng)實(shí)際上都是這樣的參數(shù)賦值的短形式。-c可以出現(xiàn)多次從而設(shè)置多個參數(shù)。
設(shè)置調(diào)試級別。數(shù)值越高,寫到服務(wù)器日志的調(diào)試輸出越多。取值范圍是1到5。 還可以針對某次單獨(dú)的會話使用-d 0來防止從父postgres進(jìn)程繼承日志級別。
聲明數(shù)據(jù)目錄或者配置文件的文件系統(tǒng)路徑。 細(xì)節(jié)詳見Section 18.2。
把缺省日期風(fēng)格設(shè)置為"European",也就是說用DMY規(guī)則解釋日期輸入, 并且在一些日期輸出格式里日子在月份前面打印。參閱Section 8.5獲取更多細(xì)節(jié)。
關(guān)閉fsync
調(diào)用以提高性能,但是要冒系統(tǒng)崩潰時數(shù)據(jù)毀壞的風(fēng)險。
聲明這個選項(xiàng)等效關(guān)閉了fsync參數(shù)。在使用之前閱讀詳細(xì)文檔!
指定postgres偵聽來自前端應(yīng)用 TCP/IP 連接的IP主機(jī)名或地址。 數(shù)值也可以是一個用空格分隔的地址列表,或者*表示監(jiān)聽所有可用的地址。 空值表示不監(jiān)聽任何IP地址,而只使用Unix域套接字與客戶端通信。 缺省只監(jiān)聽localhost。聲明這個選項(xiàng)等效于設(shè)置listen_addresses配置參數(shù)。
這個選項(xiàng)允許遠(yuǎn)程客戶通過TCP/IP(網(wǎng)際域套接字)與服務(wù)器通訊。 沒有這個選項(xiàng),服務(wù)器將只接受本地連接。這個選項(xiàng)等效于在postgresql.conf中 或者通過-h選項(xiàng)將listen_addresses設(shè)為*。
這個選項(xiàng)已經(jīng)廢棄了,因?yàn)樗荒軐?shí)現(xiàn)listen_addresses的所有功能。所以最好直接設(shè)置listen_addresses。
指定postgres偵聽來自前端應(yīng)用連接的Unix域套接字的目錄。 缺省通常是/tmp,但是可以在編譯的時候修改。
這個選項(xiàng)使用SSL進(jìn)行的安全通訊。要使用這個選項(xiàng), 編譯PostgreSQL時你必須打開了SSL支持。有關(guān)使用SSL的信息,請參考Section 17.8。
設(shè)置該服務(wù)器將接受的最大客戶端連接數(shù)木。該參數(shù)的默認(rèn)值由initdb自動選擇。 指定這個選項(xiàng)相當(dāng)于設(shè)置max_connections配置參數(shù)。
在extra-options里面指定的命令行選項(xiàng)將被傳遞給所有由這個postgres派生的服務(wù)進(jìn)程。 如果選項(xiàng)字符串包含任何空白,那么整個字符串必須用引號界定。
反對使用該選項(xiàng),所有服務(wù)器進(jìn)程的命令行選項(xiàng)都可以直接在postgres命令行上指定,不必這么麻煩。
指定postgres偵聽客戶端連接的TCP/IP端口或本地Unix domain socket文件的擴(kuò)展。 缺省的端口號是環(huán)境變量PGPORT的值。如果PGPORT沒有設(shè)置,那么缺省是PostgreSQL編譯時指定 的值(通常是5432)。如果你聲明了一個非缺省端口,那么所有前端應(yīng)用都必須用命令行選 項(xiàng)或者PGPORT聲明同一個端口。
在每條命令結(jié)束時打印時間信息和其它統(tǒng)計信息。這個開關(guān)對測試性能和調(diào)節(jié)緩沖區(qū)數(shù)量有好處。
聲明內(nèi)部排序和散列在求助于臨時磁盤文件之前可以使用的內(nèi)存數(shù)量。 參閱Section 18.4.1里描述的配置變量work_mem。
設(shè)置一個命名的運(yùn)行時參數(shù);其縮寫形式是 -c.
以制表符分隔的COPY格式,導(dǎo)出服務(wù)器內(nèi)部配置變量、描述、缺省值。 設(shè)計它主要是給管理工具使用。
這里描述的選項(xiàng)主要用于調(diào)試目的,在某些情況下協(xié)助恢復(fù)受損嚴(yán)重的數(shù)據(jù)庫。 應(yīng)該沒有原因在生產(chǎn)數(shù)據(jù)庫設(shè)置中使用它們。他們被列在這里進(jìn)為了PostgreSQL 系統(tǒng)開發(fā)者使用。此外,這些選項(xiàng)可能在將來的版本中更改或刪除而不另行通知。
禁止某種掃描和連接方法的使用:s和i分別關(guān)閉順序和索引掃描, 而n,m,h分別關(guān)閉嵌套循環(huán),融合(merge)和Hash連接。
順序掃描和嵌套循環(huán)都不可能完全被關(guān)閉。-fs和-fn選項(xiàng)僅僅是在存在其它方法時阻礙優(yōu)化器使用這些方法罷了。
該選項(xiàng)主要用于調(diào)試導(dǎo)致服務(wù)器進(jìn)程異常崩潰的問題。對付這種情況的一般策略是通知所有其它服務(wù)器進(jìn)程終止并重新初始化共享內(nèi)存和信號燈。 這是因?yàn)橐粋€出錯的服務(wù)器進(jìn)程可能在終止之前就已經(jīng)對共享的東西造成了破壞。 該選項(xiàng)指定postgres不重新初始化共享數(shù)據(jù)結(jié)構(gòu)。一個有經(jīng)驗(yàn)的系統(tǒng)程序員這時就可以使用調(diào)試器檢查共享內(nèi)存和信號燈狀態(tài)。
允許修改系統(tǒng)表的結(jié)構(gòu)。這個參數(shù)用于initdb。
讀取系統(tǒng)表時忽略系統(tǒng)索引(但在更改數(shù)據(jù)時仍然更新索引)。 這對于從索引已經(jīng)損壞的系統(tǒng)表中回復(fù)是很有幫助的。
打印與每個主要系統(tǒng)模塊相關(guān)的查詢記時統(tǒng)計。它不能和-s選項(xiàng)一起使用。
該選項(xiàng)主要用于調(diào)試導(dǎo)致服務(wù)器進(jìn)程異常崩潰的問題。 對付這種情況的一般策略是通知所有其它服務(wù)器進(jìn)程終止并重新初始化共享內(nèi)存和信號燈。 這是因?yàn)橐粋€出錯的服務(wù)器進(jìn)程可能在終止之前就已經(jīng)對共享的東西造成了破壞。 該選項(xiàng)指定postgres通過發(fā)送SIGSTOP信號停止其他所有服務(wù)器進(jìn)程,但是并不讓它們退出。 這樣就允許系統(tǒng)程序員手動從所有服務(wù)器進(jìn)程搜集內(nèi)核轉(zhuǎn)儲。
聲明這次會話使用的前/后服務(wù)器協(xié)議的版本數(shù)。該選項(xiàng)僅在內(nèi)部使用。
一旦看見這個選項(xiàng),進(jìn)程就睡眠標(biāo)出的秒數(shù)。這樣就給開發(fā)者一些時間把調(diào)試器附著在該服務(wù)器進(jìn)程上。
下面的選項(xiàng)僅在單用戶模式下可用。
選中單用戶模式。這個必須是命令行中的第一個選項(xiàng)。
聲明要訪問的數(shù)據(jù)庫的名稱。這一定是命令行的最后一個參數(shù)。如果省略它,則默認(rèn)為用戶名。
回顯所有命令。
禁止使用新行作為語句分隔符。
將所有服務(wù)器輸出日志保存到filename中。在多用戶模式下該選項(xiàng)將被忽略,所有進(jìn)程都將使用stderr。
客戶端使用的缺省字符編碼。客戶端可以獨(dú)立地覆蓋它。這個值也可以在配置文件里設(shè)置。
缺省數(shù)據(jù)目錄位置。
運(yùn)行時參數(shù)DateStyle的缺省值?,F(xiàn)在反對使用該環(huán)境變量。
Default port number (preferably set in the configuration file) 缺省端口(最好在配置文件中設(shè)置)。
服務(wù)器的時區(qū)。
一個提到了semget或shmget的錯誤信息可能意味著你需要重新配置你的內(nèi)核, 提供足夠的共享內(nèi)存和信號燈。更多討論,參閱Section 17.4。 你也可以通過降低shared_buffers值以減少PostgreSQL的共享內(nèi)存的消耗, 或者降低max_connections值減少PostgreSQL的信號燈的消耗。
如果碰到一個說另外一個服務(wù)器正在運(yùn)行的錯誤信息,可以根據(jù)不同的系統(tǒng)使用命令
$ ps ax | grep postgres
或
$ ps -ef | grep postgres
如果確信沒有沖突的服務(wù)器正在運(yùn)行,那么你可以刪除消息里提到的鎖文件然后再次運(yùn)行。
抱怨無法綁定端口的錯誤信息可能表明該端口已經(jīng)被其它非PostgreSQL進(jìn)程使用。 如果終止postgres后又馬上用同一個端口運(yùn)行它,也可能得到這個錯誤信息; 這時,你必須多等幾秒,等操作系統(tǒng)關(guān)閉了該端口后再試。最后, 如果你使用了一個操作系統(tǒng)認(rèn)為是保留的端口,也可能導(dǎo)致這個錯誤信息。例如, 我的Unix版本認(rèn)為低于1024的端口號是"可信任的",因而只有Unix超級用戶可以使用它們。
實(shí)用程序命令pg_ctl可以用來安全方便地 啟動和關(guān)閉postgres服務(wù)器。
如果有可能,不要使用SIGKILL殺死 主postgres服務(wù)器進(jìn)程。這樣會阻止postgres 在退出前釋放它持有的系統(tǒng)資源(例如共享內(nèi)存和信號燈)。 這樣可能會影響到將來啟動新的postgres進(jìn)程。
可以使用SIGTERM,SIGINT,SIGQUIT 信號正常結(jié)束postgres服務(wù)器進(jìn)程。 第一個信號將等待所有的客戶端退出后才退出。第二個將強(qiáng)制斷開所有客戶端,而第三個將不停止立刻退出, 導(dǎo)致在重啟時的恢復(fù)運(yùn)行。
SIGHUP會重新加載服務(wù)器配置文件。也可以向一個單獨(dú)的服務(wù)器進(jìn)程發(fā)送 SIGHUP信號,但是這樣做沒什么意義。
要推出一個正在運(yùn)行的查詢,可以向正在執(zhí)行該查詢的進(jìn)程發(fā)送SIGINT信號。
主postgres服務(wù)器進(jìn)程向子進(jìn)程發(fā)送SIGTERM信號讓它們正常退出; 發(fā)送SIGQUIT信號立即退出且不做清理工作,用戶應(yīng)當(dāng)盡量避免使用該信號。 同時,發(fā)送SIGKILL信號也是不明智的:主postgres進(jìn)程將把這個信號當(dāng)作崩潰信號, 然后會強(qiáng)制其他兄弟進(jìn)程作為標(biāo)準(zhǔn)的崩潰回復(fù)過程退出。
選項(xiàng)在FreeBSD或OpenBSD上無法運(yùn)行,應(yīng)該使用-c。這在受影響的系統(tǒng)里是個臭蟲; 如果這個毛病沒有修補(bǔ)好,將來的PostgreSQL版本將提供一個繞開的辦法。
啟動一個單用戶模式的服務(wù)器:
postgres --single -D /usr/local/pgsql/data other-optionsmy_database
用-D給服務(wù)器提供正確的數(shù)據(jù)庫目錄的路徑, 或者確保環(huán)境變量PGDATA已經(jīng)正確設(shè)置。同時還要聲名你想用的特定數(shù)據(jù)庫名字。
通常,獨(dú)立運(yùn)行的服務(wù)器把換行符當(dāng)做命令輸入完成字符;它還不懂分號的作用,因?yàn)槟切〇|西是在psql里的。 要想把一行分成多行寫,你必需在除最后一個換行符以外的每個換行符前面敲一個反斜杠。
但是如果使用了-j命令行選項(xiàng),新行將不被當(dāng)作命令結(jié)束符。此時服務(wù)器將從標(biāo)準(zhǔn)輸入一直讀取到EOF標(biāo)志為止, 然后把把所有讀到的內(nèi)容當(dāng)作一個完整的命令字符串看待,并且反斜杠與換行符也被當(dāng)作普通字符來看待。
輸入EOF(Control+D)即可退出會話。如果你已經(jīng)使用了-j則必須連續(xù)使用兩個EOF才行。
請注意單用戶模式運(yùn)行的服務(wù)器不會提供復(fù)雜的行編輯功能(比如,沒有命令行歷史)。
用缺省值在后臺啟動postgres:
$ nohup postgres >logfile 2>&1 </dev/null &
在指定的端口啟動postgres:
$ postgres -p 1234
這條命令將在端口1234啟動postgres。你應(yīng)該這樣使用psql與之連接:
$ psql -p 1234
或者設(shè)置環(huán)境變量PGPORT:
$ export PGPORT=1234 $ psql
命名的運(yùn)行時參數(shù)可以用下列的風(fēng)格之一設(shè)置:
$ postgres -c work_mem=1234 $ postgres --work-mem=1234
兩種形式都覆蓋那些現(xiàn)有的在postgresql.conf里面的work_mem設(shè)置。 請注意在參數(shù)名里的下劃線在命令行上可以寫成下劃線,也可以寫成連字符。 除了用于短期的實(shí)驗(yàn)以外,更好的習(xí)慣是編輯postgresql.conf里面的設(shè)置, 而不是倚賴命令行開關(guān)設(shè)置參數(shù)。
initdb, pg_ctl