W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
postgres — PostgreSQL數(shù)據(jù)庫服務(wù)器
postgres
[選項
...]
postgres
是PostgreSQL數(shù)據(jù)庫服務(wù)器。一個客戶端應(yīng)用為了能訪問一個數(shù)據(jù)庫,它會(通過一個網(wǎng)絡(luò)或者本地)連接到一個運行著的postgres
實例。該postgres
實例接著會開始一個獨立的服務(wù)器進程來處理該連接。
一個postgres
實例總是管理正好一個數(shù)據(jù)庫集簇的數(shù)據(jù)。一個數(shù)據(jù)庫集簇是一個數(shù)據(jù)庫的集合,它們被存儲在一個共同的文件系統(tǒng)位置(“數(shù)據(jù)區(qū)”)上。 一個系統(tǒng)上可以同時運行多個postgres
實例,只要它們使用不同的數(shù)據(jù)區(qū)和不同的通信端口(見下文)。postgres
啟動時需要知道數(shù)據(jù)區(qū)的位置,該位置必須通過
-D
選項或PGDATA
環(huán)境變量指定,對此是沒有默認值的。通常,-D
或PGDATA
會直接指向由initdb創(chuàng)建的數(shù)據(jù)區(qū)目錄。其他可能的文件布局在
第 19.2 節(jié)中討論。
默認情況下,postgres
會在前臺啟動并將日志消息打印到標準錯誤流。但在實際應(yīng)用中,postgres
應(yīng)當作為一個后臺進程啟動,而且多數(shù)是在系統(tǒng)啟動時自動啟動。
postgres
還能在單用戶模式中被調(diào)用。這種模式的主要用途是在啟動過程中由initdb使用。有時候它也被用于調(diào)試或者災(zāi)難性恢復(fù)。注意,運行一個單用戶模式服務(wù)器并不真地適合調(diào)試服務(wù)器,因為不會發(fā)生實際的進程間通信和鎖定。當從 shell 中調(diào)用單用戶模式時,用戶可以輸入查詢并且結(jié)果會被以一種更適合開發(fā)者閱讀(不適合普通用戶)的形式打印在屏幕上。在單用戶模式中,會話用戶將被設(shè)置為
ID 為 1 的用戶,并且這個用戶會被隱式地賦予超級用戶權(quán)限。該用戶不必實際存在,因此單用戶模式運行可以被用來對某些意外損壞的系統(tǒng)目錄進行手工恢復(fù)。
postgres
接受下列命令行參數(shù)。關(guān)于這些選項的詳細討論請參考第 19 章。你也可以通過設(shè)置一個配置文件來減少鍵入大部分這些選項。有些(安全)選項還可以從連接的客戶端以一種與應(yīng)用相關(guān)只應(yīng)用于會話的方法設(shè)置。例如,如果設(shè)置了PGOPTIONS
環(huán)境變量,那么基于
libpq的客戶端將都把那個字符串傳遞給服務(wù)器,它將被服務(wù)器解釋成postgres
命令行選項。
-B nbuffers
設(shè)置被服務(wù)器進程使用的共享內(nèi)存緩沖區(qū)數(shù)量。這個參數(shù)的默認值是initdb自動選擇的。指定這個選項等效于設(shè)置shared_buffers配置參數(shù)。
-c name
=value
設(shè)置一個命名的運行時參數(shù)。PostgreSQL支持的配置參數(shù)在第 19 章中描述。大多數(shù)其它命令行選項實際上都是這種參數(shù)賦值的短形式。-c
可以出現(xiàn)多次用于設(shè)置多個參數(shù)。
-C name
打印命名運行時參數(shù)的值,并且退出(詳見上面的-c
選項)。這可以被用在一個運行服務(wù)器上,并且從postgresql.conf
中返回值,這些值可能被在這次調(diào)用中的任何參數(shù)修改過。它并不反映集簇啟動時提供的參數(shù)。
這個選項用于與一個服務(wù)器實例交互的其他程序來查詢配置參數(shù)值,例如pg_ctl。面向用戶的應(yīng)用應(yīng)該使用SHOW或者
pg_settings
視圖。
-d debug-level
設(shè)置調(diào)試級別。數(shù)值設(shè)置得越高,寫到服務(wù)器日志的調(diào)試輸出就越多。取值范圍是從 1 到 5。還可以針對某個特定會話使用-d 0
來阻止父postgres
進程的服務(wù)器日志級別被傳播到這個會話。
-D datadir
指定數(shù)據(jù)庫配置文件的文件系統(tǒng)位置。詳見第 19.2 節(jié)。
-e
把默認日期風(fēng)格設(shè)置為“European”,也就是輸入日期域的順序是DMY
。這也導(dǎo)致在一些日期輸出格式中把日打印在月之前。詳見第 8.5 節(jié)。
-F
禁用fsync
調(diào)用以提高性能,但是要冒系統(tǒng)崩潰時數(shù)據(jù)損壞的風(fēng)險。指定這個選項等效于禁用fsync配置參數(shù)。在使用之前閱讀詳細文檔!
-h hostname
指定postgres
監(jiān)聽來自客戶端應(yīng)用 TCP/IP 連接的 IP 主機名或地址。該值也可以是一個用逗號分隔的地址列表,或者*
表示監(jiān)聽所有可用的地址。一個空值表示不監(jiān)聽任何 IP 地址,在這種情況下可以使用 Unix 域套接字連接到服務(wù)器。缺省只監(jiān)聽localhost。聲明這個選項等效于設(shè)置listen_addresses配置參數(shù)。默認只監(jiān)聽localhost。指定這個選項等效于設(shè)置
listen_addresses配置參數(shù)。
-i
允許遠程客戶端使用 TCP/IP (互聯(lián)網(wǎng)域)連接。沒有這個選項,將只接受本地連接。這個選項等效于在postgresql.conf
中或者通過-h
選項將listen_addresses
設(shè)為*
。
這個選項已經(jīng)被廢棄,因為它不允許訪問listen_addresses的完整功能。所以最好直接設(shè)置listen_addresses
。
-k directory
指定postgres
用來監(jiān)聽來自客戶端應(yīng)用連接的 Unix 域套接字的目錄。這個值也可以是一個逗號分隔的目錄列表。一個空值指定不監(jiān)聽任何 Unix 域套接字,在這種情況下只能用 TCP/IP 套接字來連接到服務(wù)器。默認值通常是/tmp
,但是可以在編譯的時候修改。指定這個選項等效于設(shè)置unix_socket_directories配置參數(shù)。
-l
啟用使用SSL的安全連接。要使這個選項可用,編譯PostgreSQL時必須打開SSL支持。有關(guān)使用SSL的更多信息,請參考第 18.9 節(jié)。
-N max-connections
設(shè)置該服務(wù)器將接受的最大客戶端連接數(shù)。該參數(shù)的默認值由initdb自動選擇。指定這個選項等效于設(shè)置max_connections配置參數(shù)。
-o extra-options
在extra-options
中指定的命令行風(fēng)格的參數(shù)會被傳遞給所有由這個postgres
進程派生的服務(wù)進程。
extra-options
中的空格被視作 參數(shù)分隔符,除非用反斜線(\
)轉(zhuǎn)義。要表示一個字面意 義上的反斜線,可以寫成\\
。通過多次使用-o
也可以指定多個參數(shù)。
這個選項的使用已經(jīng)被廢棄。用于服務(wù)器進程的所有命令行選項可以在postgres
命令行上直接指定。
-p port
指定postgres
用于監(jiān)聽客戶端應(yīng)用連接的 TCP/IP 端口或本地 Unix 域套接字文件擴展。默認為PGPORT
環(huán)境變量的值。如果PGPORT
沒有設(shè)置,那么默認值是編譯期間設(shè)立的值(通常是 5432)。如果你指定了一個非默認端口,那么所有客戶端應(yīng)用都必須用命令行選項或者PGPORT
指定同一個端口。
-s
在每條命令結(jié)束時打印時間信息和其它統(tǒng)計信息。這個選項對測試基準和調(diào)節(jié)緩沖區(qū)數(shù)量有用處。
-S
work-mem
指定在使用臨時磁盤文件之前排序和散列表使用的基本內(nèi)存量。 請參閱 第 19.4.1 節(jié) 中 work_mem
配置參數(shù)的說明。
-V
--version
打印postgres版本并退出。
--name
=value
設(shè)置一個命名的運行時參數(shù);其縮寫形式是-c
。
--describe-config
這個選項會用制表符分隔的COPY
格式導(dǎo)出服務(wù)器的內(nèi)部配置變量、描述以及默認值。設(shè)計它的目的是用于管理工具。
-?
--help
顯示有關(guān)postgres的命令行參數(shù),并且退出。
這里描述的選項主要被用于調(diào)試目的,并且在某些情況下可以協(xié)助恢復(fù)嚴重受損的數(shù)據(jù)庫。在生產(chǎn)數(shù)據(jù)庫環(huán)境中應(yīng)該不會去使用它們。在這里列舉它們只是為了讓PostgreSQL系統(tǒng)開發(fā)者使用。此外,這些選項可能在將來的版本中更改或刪除而不另行通知。
-f
{ s | i | o | b | t | n | m | h }
禁止某種掃描和連接方法的使用:s
和i
分別禁用順序和索引掃描, o
、b
和t
分別禁用只用索引掃描、位圖索引掃描以及 TID 掃描,而n
、m
和
h
則分別禁用嵌套循環(huán)、歸并和哈希連接。
順序掃描和嵌套循環(huán)連接都不可能完全被禁用。-fs
和-fn
選項僅僅是在有其他選擇時不鼓勵優(yōu)化器使用這些計劃類型。
-n
該選項主要用于調(diào)試導(dǎo)致服務(wù)器進程異常崩潰的問題。對付這種情況的一般策略是通知所有其它服務(wù)器進程,讓它們終止并且接著重新初始化共享內(nèi)存和信號量。這是因為一個錯誤的服務(wù)器進程可能在終止之前就已經(jīng)對共享狀態(tài)造成了破壞。該選項指定postgres
將不會重新初始化共享數(shù)據(jù)結(jié)構(gòu)。一個有經(jīng)驗的系統(tǒng)程序員這時就可以使用調(diào)試器檢查共享內(nèi)存和信號量狀態(tài)。
-O
允許修改系統(tǒng)表的結(jié)構(gòu)。這個選項用于initdb
。
-P
讀取系統(tǒng)表時忽略系統(tǒng)索引(但在更改系統(tǒng)表時仍然更新索引)。這在從損壞的系統(tǒng)索引中恢復(fù)時有用。
-t
pa[rser] | pl[anner] | e[xecutor]
打印與每個主要系統(tǒng)模塊相關(guān)的查詢的時間統(tǒng)計。這個選項不能和-s
選項一起使用。
-T
該選項主要用于調(diào)試導(dǎo)致服務(wù)器進程異常崩潰的問題。對付這種情況的一般策略是通知所有其它服務(wù)器進程,讓它們終止并且接著重新初始化共享內(nèi)存和信號量。這是因為一個錯誤的服務(wù)器進程可能在終止之前就已經(jīng)對共享狀態(tài)造成了破壞。該選項指定postgres
將通過發(fā)送SIGSTOP
信號停止其他所有服務(wù)器進程,但是并不讓它們終止。這樣就允許系統(tǒng)程序員手動從所有服務(wù)器進程收集內(nèi)核轉(zhuǎn)儲。
-v
protocol
聲明這次會話使用的前/后服務(wù)器協(xié)議的版本數(shù)。該選項僅在內(nèi)部使用。
-W
seconds
在一個新服務(wù)器進程被啟動時,它實施認證過程之后會延遲這個選項所設(shè)置的秒數(shù)。這就留出了機會來用一個調(diào)試器附著在服務(wù)器進程上。
PGCLIENTENCODING
客戶端使用的默認字符編碼(客戶端可以獨立地覆蓋它)。這個值也可以在配置文件中設(shè)置。
PGDATA
默認的數(shù)據(jù)目錄位置。
PGDATESTYLE
DateStyle運行時參數(shù)的默認值(這個環(huán)境變量的使用已被廢棄)。
PGPORT
默認端口號(在配置文件中設(shè)置更好)
一個提到了semget
或shmget
的錯誤消息可能意味著你需要配置內(nèi)核來提供足夠的共享內(nèi)存和信號量。更多討論請見第 18.4 節(jié)。你也可以通過降低shared_buffers值減少
PostgreSQL的共享內(nèi)存消耗, 或者降低max_connections值減少信號量消耗,這樣可以推遲對內(nèi)核的重新配置。
如果一個消息說另外一個服務(wù)器已經(jīng)在運行,應(yīng)該仔細地檢查,例如根據(jù)你的系統(tǒng)可以用命令
$
ps ax | grep postgres
或
$
ps -ef | grep postgres
如果你確信沒有沖突的服務(wù)器正在運行,那么你可以刪除消息中提到的鎖文件然后再次嘗試。
如果一個失敗消息指示它無法綁定到一個端口,可能意味著該端口已經(jīng)被某些非PostgreSQL進程所使用。如果你終止postgres
并且立即使用相同的端口重啟它,你也可能會得到這種錯誤。在這種情況系,你必須等待幾秒直到操作系統(tǒng)關(guān)閉該端口,然后再重試。最后,如果你指定了一個操作系統(tǒng)認為需要保留的端口號,你可能也會得到這個錯誤。例如,很多版本的 Unix 認為低于 1024 的端口號是
“可信的”并且只允許 Unix 超級用戶訪問它們。
實用命令pg_ctl可以用來安全方便地啟動和關(guān)閉postgres
服務(wù)器。
只要有可能,就不要使用SIGKILL
殺死主postgres
服務(wù)器。這樣會阻止postgres
在終止前釋放它持有的系統(tǒng)資源(例如共享內(nèi)存和信號量)。這樣可能會導(dǎo)致啟動新的postgres
進程時出現(xiàn)問題。
要正常地終止postgres
服務(wù)器,可以使用SIGTERM
、SIGINT
或者SIGQUIT
信號。第一個在退出前將等待所有客戶端終止,第二個將強行斷開所有客戶端的連接,第三個會不做正確的關(guān)閉立即退出并且會導(dǎo)致重啟時的恢復(fù)。
SIGHUP
信號會重新加載服務(wù)器配置文件。也可以向一個單獨的服務(wù)器進程發(fā)送SIGHUP
信號,但是這樣做通常沒什么意義。
要取消一個正在運行的查詢,可以向運行該查詢的進程發(fā)送SIGINT
信號。要干凈地終止一個后端進程,可向它發(fā)送SIGTERM
。在 SQL 中可調(diào)用的與這兩種動作等效的命令可參考第 9.27.2 節(jié)中的
pg_cancel_backend
和pg_terminate_backend
。
postgres
服務(wù)器使用SIGQUIT
來告訴子服務(wù)器進程終止但不做正常的清理。該信號不應(yīng)該被用戶使用。向一個服務(wù)器進程發(fā)送SIGKILL
也是不明智的 — 主postgres
進程將把這解釋為一次崩潰,并且作為其標準崩潰恢復(fù)過程的一部分,它將強制所有的后代進程退出。
--
選項在FreeBSD或OpenBSD上無法運行,應(yīng)該使用-c
。這在受影響的系統(tǒng)里是個缺陷; 如果這個缺陷沒有被修復(fù),將來的PostgreSQL版本將提供一種解決方案。
要啟動一個單用戶模式的服務(wù)器,使用這樣的命令
postgres --single -D /usr/local/pgsql/data other-options
my_database
用-D
給服務(wù)器提供正確的數(shù)據(jù)庫目錄的路徑,或者確保環(huán)境變量PGDATA
被設(shè)置。同時還要指定你想在其中工作的特定數(shù)據(jù)庫的名字。
通常,單用戶模式的服務(wù)器會把換行符當做命令輸入的終止符。它不明白分號的作用,因為那屬于psql。要想把一個命令分成多行,必須在最后一個換行符以外的每個換行符前面敲一個反斜線。這個反斜線和旁邊的新行都會被從輸入命令中去掉。注意即使在字符串或者注釋中也會這樣做。
但是如果使用了-j
命令行選項,那么單個新行將不會終止命令輸入。相反,分號-新行-新行的序列才會終止命令輸入。也就是說,輸入一個緊跟著空行的分號。在這種模式下,反斜線-新行不會被特殊對待。此外,在字符串或者注釋內(nèi)的這類序列也不會被特殊對待。
不管在哪一種輸入模式中,如果輸入的一個分號不是正好在命令終止符之前或者不是命令終止符的一部分,它會被認為是一個命令分隔符。當真正輸入一個命令終止符時,已經(jīng)輸入的多個語句將被作為一個單個事務(wù)執(zhí)行。
要退出會話,輸入EOF(通常是Control+D)。如果從上一個命令終止符以來已經(jīng)輸入了任何文本,那么EOF將被當作命令終止符,并且如果要退出則需要另一個EOF。
請注意單用戶模式的服務(wù)器不會提供復(fù)雜的行編輯特性(例如沒有命令歷史)。但用戶模式也不會做任何后臺處理,例如自動檢查點或者復(fù)制。
要用默認值在后臺啟動postgres
:
$
nohup postgres >logfile 2>&1 </dev/null &
要用指定端口啟動postgres
,例如 1234:
$
postgres -p 1234
要使用psql連接到這個服務(wù)器,用 -p 選項指定這個端口:
$
psql -p 1234
或者設(shè)置環(huán)境變量PGPORT
:
$
export PGPORT=1234
$
psql
命名運行時參數(shù)可以用這些形式之一設(shè)置:
$
postgres -c work_mem=1234
$
postgres --work-mem=1234
兩種形式都覆蓋postgresql.conf
中可能存在的work_mem
設(shè)置。請注意在參數(shù)名中的下劃線在命令行可以寫成下劃線或連字符。除了用于短期的實驗外,更好的習(xí)慣是編輯postgresql.conf
中的設(shè)置, 而不是倚賴命令行開關(guān)來設(shè)置參數(shù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: