pg_ctl
名稱(chēng)
pg_ctl -- 啟動(dòng)瘸右、停止、重啟 PostgreSQL
語(yǔ)法
pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop [-W] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart [-w] [-s] [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload [-s] [-D datadir]
pg_ctl status [-D datadir]
pg_ctl kill [signal_name] [process_id]
pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w] [-o options]
pg_ctl unregister [-N servicename]
描述
pg_ctl 用于啟動(dòng)站叼、停止、重啟 PostgreSQL 后端服務(wù)器(postgres),或者顯示一個(gè)運(yùn)行著的服務(wù)器的狀態(tài)抡医。盡管可以手動(dòng)啟動(dòng)服務(wù)器达址,但是 pg_ctl 封裝了重新定向日志輸出蔑祟,與終端和進(jìn)程組合理分離,以及另外提供了一個(gè)選項(xiàng)用于有控制的關(guān)閉沉唠。
在 start 模式里會(huì)啟動(dòng)一個(gè)新的服務(wù)器疆虚。服務(wù)器是在后臺(tái)啟動(dòng)的,標(biāo)準(zhǔn)輸入被附著到了 /dev/null 上。如果使用了 -l 装蓬,那么標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤將被定向到一個(gè)日志文件著拭,要么就是重定向到 pg_ctl 的標(biāo)準(zhǔn)輸出(而不是標(biāo)準(zhǔn)錯(cuò)誤)。如果沒(méi)有選定日志文件牍帚,pg_ctl 的標(biāo)準(zhǔn)輸出應(yīng)該重定向到一個(gè)文件或者用管道輸出到類(lèi)似 rotatelogs這樣的日志滾動(dòng)程序儡遮,否則,postgres 將把它的輸出寫(xiě)到控制終端(在后臺(tái))并且將不會(huì)脫離 shell 的進(jìn)程組暗赶。
在 stop 模式下鄙币,那個(gè)正在特定數(shù)據(jù)目錄運(yùn)行的服務(wù)器將被關(guān)閉。你可以用 -m 選項(xiàng)選擇三種不同的關(guān)閉模式:"Smart"模式等待所有客戶(hù)端中斷連接蹂随,這是缺省十嘿。"Fast"模式并不等待客戶(hù)端中斷連接,所有活躍事務(wù)都被回滾并且客戶(hù)端都被強(qiáng)制斷開(kāi)岳锁。"Immediate"模式將在沒(méi)有干凈關(guān)閉的情況下強(qiáng)行退出绩衷。這么做將導(dǎo)致在重新啟動(dòng)的時(shí)候的恢復(fù)。
restart 實(shí)際上是先執(zhí)行一個(gè)停止激率,然后緊跟一個(gè)啟動(dòng)咳燕。它允許變換 postgres 的命令行選項(xiàng)。
reload 模式簡(jiǎn)單地給 postgres 發(fā)送一個(gè) SIGHUP 信號(hào)乒躺,導(dǎo)致它重新讀取配置文件(postgresql.conf,pg_hba.conf 等)招盲,這樣就允許修改配置文件選項(xiàng)而不用重啟系統(tǒng)即可生效。
status 模式監(jiān)查一個(gè)服務(wù)器是否在指定的數(shù)據(jù)目錄運(yùn)行嘉冒,如果是曹货,那么顯示其 PID 和調(diào)用它的命令行選項(xiàng)。
kill 模式允許你給一個(gè)指定的進(jìn)程發(fā)送信號(hào)讳推。這個(gè)功能對(duì) Microsoft Windows 特別有用顶籽,因?yàn)樗鼪](méi)有 kill 命令。使用 --help 查看支持的信號(hào)名字列表娜遵。
register 模式允許你在 Microsoft Windows 上注冊(cè)一個(gè)系統(tǒng)服務(wù)蜕衡。
unregister 模式允許你在 Microsoft Windows 上刪除先前用 register 命令注冊(cè)的系統(tǒng)服務(wù)。
選項(xiàng)
-D datadir
聲明該數(shù)據(jù)庫(kù)的文件系統(tǒng)位置设拟。如果忽略則使用 PGDATA 環(huán)境變量慨仿。
-l filename
把服務(wù)器日志輸出附加在 filename 文件上。如果該文件不存在則創(chuàng)建它纳胧。umask 設(shè)置為 077 镰吆,因此缺省時(shí)是不允許從其它用戶(hù)向日志文件訪(fǎng)問(wèn)的。
-m mode
聲明關(guān)閉模式跑慕。mode 可以是 smart, fast, immediate 之一万皿,或者是這三個(gè)的首字母之一摧找。
-o options
聲明要直接傳遞給 postgres 的選項(xiàng)。
參數(shù)通常都用單或者雙引號(hào)包圍以保證它們作為一個(gè)整體傳遞牢硅。
-p path
聲明 postgres 可執(zhí)行文件的位置蹬耘。缺省位于 pg_ctl 自身所在目錄,如果沒(méi)找到則使用硬編碼的安裝目錄减余。除非你想干點(diǎn)什么特別的事情综苔,并且想得到類(lèi)似沒(méi)有找到 postgres 這樣的錯(cuò)誤,否則必須使用這個(gè)選項(xiàng)位岔。
-s
只打印錯(cuò)誤如筛,而不打印提示性信息。
-w
等待啟動(dòng)或者關(guān)閉的完成(60 秒超時(shí))抒抬,這個(gè)參數(shù)是關(guān)閉時(shí)的缺省值杨刨。成功的關(guān)閉是以刪除 PID 文件為標(biāo)志的。對(duì)于啟動(dòng)而言擦剑,一次成功的 psql -l 就標(biāo)志著成功妖胀。pg_ctl 將企圖使用對(duì) psql 合適的端口,如果存在 PGPORT環(huán)境變量抓于,那么將用它做粤。否則,它將查找在 postgresql.conf 文件里是否設(shè)置了一個(gè)端口捉撮。如果都沒(méi)有瞪讼,它將使用 PostgreSQL 編譯時(shí)的缺省端口(缺省 5432)榄审。在等待的時(shí)候,pg_ctl 將根據(jù)啟動(dòng)或者關(guān)閉的成功狀況返回一個(gè)準(zhǔn)確的退出代碼平道。
-W
不等待啟動(dòng)或者停止的完成闯估。這是啟動(dòng)和重啟的缺省灼舍。
Windows 選項(xiàng)
-N servicename
要注冊(cè)的系統(tǒng)服務(wù)的名字。這個(gè)名字將用于服務(wù)名和顯示名涨薪。
-P password
用戶(hù)啟動(dòng)服務(wù)的口令
-U username
用于啟動(dòng)服務(wù)的用戶(hù)的用戶(hù)名骑素。對(duì)于域用戶(hù),使用 DOMAIN\username 格式刚夺。
環(huán)境變量
PGDATA
缺省數(shù)據(jù)目錄位置
PGPORT
psql 的缺省端口(由 -w 選項(xiàng)使用)献丑。
其它的環(huán)境變量請(qǐng)參閱 postgres
文件
postmaster.pid
這個(gè)文件存在于數(shù)據(jù)目錄中是為了幫助 pg_ctl 判斷服務(wù)器當(dāng)前是否在運(yùn)行。
postmaster.opts.default
如果這個(gè)文件存在于數(shù)據(jù)目錄侠姑,pg_ctl (在 start 模式下)將把文件地內(nèi)容當(dāng)作傳遞給 postgres 命令的選項(xiàng)傳遞過(guò)去创橄,除非被 -o 選項(xiàng)覆蓋。
postmaster.opts
如果這個(gè)文件存在于數(shù)據(jù)目錄莽红,pg_ctl (在 start 模式下)將把文件地內(nèi)容當(dāng)作傳遞給 postgres 命令的選項(xiàng)傳遞過(guò)去妥畏,除非被 -o 選項(xiàng)覆蓋邦邦。這個(gè)文件的內(nèi)容也會(huì)在 status 模式里顯示出來(lái)。
postgresql.conf
這個(gè)文件在數(shù)據(jù)目錄中醉蚁,會(huì)分析它以查找和 psql 一起用的合適的端口(在 start 模式里給出 -w 的時(shí)候)燃辖。
注意
等待完全啟動(dòng)還不是一個(gè)定義得很完整的操作,如果訪(fǎng)問(wèn)控制設(shè)置為本地客戶(hù)端在沒(méi)有手工交互的情況下不能訪(fǎng)問(wèn)的話(huà)還可能會(huì)失效(比如口令認(rèn)證)网棍。
例子
啟動(dòng)服務(wù)器
啟動(dòng)服務(wù)器:
$ pg_ctl start
啟動(dòng)服務(wù)器的一個(gè)例子郭赐,等到服務(wù)器啟動(dòng)了才退出:
$ pg_ctl -w start
服務(wù)器使用 5433 端口,而且不帶 fsync 運(yùn)行确沸,使用:
$ pg_ctl -o "-F -p 5433" start
停止服務(wù)器
$ pg_ctl stop
使用 -m 選項(xiàng)停止服務(wù)器允許用戶(hù)控制如何關(guān)閉后端捌锭。
重啟服務(wù)器
這個(gè)命令幾乎等于先停止服務(wù)器然后再啟動(dòng)它,只不過(guò) pg_ctl 保存并重新使用上一次運(yùn)行服務(wù)器的命令行參數(shù)罗捎。重啟服務(wù)器的最簡(jiǎn)單的方法是:
$ pg_ctl restart
重啟服務(wù)器观谦,等待其停止和重啟:
$ pg_ctl -w restart
使用 5433 端口重啟并且重啟后關(guān)閉 fsync :
$ pg_ctl -o "-F -p 5433" restart
顯示服務(wù)器狀態(tài)
下面是來(lái)自 pg_ctl 的狀態(tài)輸出的例子:
$ pg_ctl status
pg_ctl: server is running (pid: 13718)
Command line was:
/usr/local/pgsql/bin/postgres '-D' '/usr/local/pgsql/data' '-p' '5433' '-B' '128'
這就是在 restart 模式中被調(diào)用的命令行。
又見(jiàn)
postgres
pg_resetxlog
名稱(chēng)
pg_resetxlog -- 重置一個(gè)數(shù)據(jù)庫(kù)集群的預(yù)寫(xiě)日志以及其它控制內(nèi)容
語(yǔ)法
pg_resetxlog [-f] [-n] [-ooid ] [-x xid ] [-e xid_epoch ] [-m mxid ] [-O mxoff ] [-l timelineid, fileid,seg ] datadir
描述
pg_resetxlog 清理預(yù)寫(xiě)日志(WAL)并且可以有選擇地重置其它一些存儲(chǔ)在 pg_control 文件中的控制信息桨菜。有時(shí)候豁状,如果這些文件崩潰了,就需要這個(gè)功能倒得。一定只把它用作最后的方法泻红,就是說(shuō)只有因?yàn)檫@樣的崩潰導(dǎo)致服務(wù)器無(wú)法啟動(dòng)的時(shí)候才使用。
運(yùn)行這個(gè)命令之后霞掺,可能就可以啟動(dòng)服務(wù)器了谊路,但是,一定要記住數(shù)據(jù)庫(kù)可能因?yàn)椴糠痔峤坏氖聞?wù)而含有不完整的數(shù)據(jù)菩彬。你應(yīng)該馬上轉(zhuǎn)儲(chǔ)數(shù)據(jù)缠劝,運(yùn)行 initdb ,然后重新加載骗灶。在重新加載之后惨恭,檢查不完整的部分然后根據(jù)需要進(jìn)行修復(fù)。
這個(gè)命令只能由安裝服務(wù)器的用戶(hù)運(yùn)行耙旦,因?yàn)樗枰獙?duì)數(shù)據(jù)目錄的讀寫(xiě)權(quán)限脱羡。出于安全考慮,pg_resetxlog 不使用環(huán)境變量 PGDATA 免都,你必須在命令行上聲明數(shù)據(jù)目錄锉罐。
如果 pg_resetxlog 抱怨說(shuō)它無(wú)法判斷用于 pg_control 的有效數(shù)據(jù),那么你可以強(qiáng)制它繼續(xù)處理琴昆,方法是聲明-f(強(qiáng)制)開(kāi)關(guān)氓鄙。在這種情況下,那些丟失了的數(shù)據(jù)將用模糊的近似數(shù)值代替业舍。大多數(shù)字段都可以匹配上抖拦,但是下一個(gè) OID 升酣、下一個(gè)事務(wù) ID 、下一個(gè)事務(wù) ID 的 epoch(時(shí)間點(diǎn))态罪、下一個(gè)多事務(wù) ID(兩階段提交的東西)噩茄、下一個(gè)多事務(wù)偏移量、WAL 開(kāi)始地址复颈、數(shù)據(jù)庫(kù)區(qū)域字段可能需要手工幫助绩聘,前面六個(gè)可以用下面討論的開(kāi)關(guān)設(shè)置。pg_resetxlog 自己的環(huán)境是猜測(cè)區(qū)域字段的來(lái)源耗啦;看看 LANG 等東西凿菩,它們應(yīng)該和 initdb 運(yùn)行的環(huán)境相匹配。如果你不能判斷所有這些字段的正確數(shù)值帜讲,那么 -f 仍然可以使用衅谷,但是這樣恢復(fù)過(guò)來(lái)的數(shù)據(jù)庫(kù)正確性更值得懷疑:立即轉(zhuǎn)儲(chǔ)和重新加載是必須的。在轉(zhuǎn)儲(chǔ)之前不要執(zhí)行任何修改數(shù)據(jù)的操作似将,因?yàn)槿魏芜@樣的動(dòng)作都可能把事情搞得更糟糕获黔。
-o, -x, -e, -m, -O, -l 開(kāi)關(guān)允許手工設(shè)置下一個(gè) OID 、下一個(gè)事務(wù) ID 在验、下一個(gè)事務(wù) ID epoch 玷氏、下一個(gè)多事務(wù) ID 、下一個(gè)多事務(wù)偏移量腋舌、WAL 起始位置的數(shù)值盏触。只有在 pg_resetxlog 無(wú)法通過(guò)讀取 pg_control 判斷合適的數(shù)值的時(shí)候才需要它。安全的數(shù)值可以用下面的方法判斷:
對(duì)于下一個(gè)事務(wù) ID(-x)而言侦厚,一個(gè)安全的數(shù)值是看看數(shù)據(jù)目錄里的 pg_clog 里數(shù)值最大的文件名耻陕,然后加一,然后再乘上 1048576 刨沦。請(qǐng)注意那些文件名是十六進(jìn)制的。通常也以十六進(jìn)制的形式聲明開(kāi)關(guān)值是最簡(jiǎn)單的膘怕。比如想诅,如果 0011 是 pg_clog 里最大的記錄,-x 0x1200000 就可以了(后面的五個(gè)零提供了合適的乘積)岛心。
下一個(gè)多事務(wù) ID(-m)的安全值可以通過(guò)查看數(shù)據(jù)目錄里 pg_multixact/offsets 子目錄里面的數(shù)字最大的文件名来破,加一,然后乘以 65536 得到忘古。和上面一樣徘禁,文件名是十六進(jìn)制的,因此最簡(jiǎn)單的方法是給開(kāi)關(guān)聲明一個(gè)十六進(jìn)制的開(kāi)關(guān)值髓堪,然后在結(jié)尾加四個(gè)零送朱。
下一個(gè)多事務(wù)偏移量(-O)的安全值可以通過(guò)檢查數(shù)據(jù)目錄里 pg_multixact/members 子目錄下的數(shù)字最大的文件名娘荡,加一,然后乘以 65536 得到驶沼。和上面一樣炮沐,文件名是十六進(jìn)制的,因此最簡(jiǎn)單的方法是給開(kāi)關(guān)聲明一個(gè)十六進(jìn)制的開(kāi)關(guān)值回怜,然后在結(jié)尾加四個(gè)零大年。
WAL 的起始位置(-l)應(yīng)該比目前存在于數(shù)據(jù)目錄 pg_xlog 里面的任何文件號(hào)都大。它的文件名也是十六進(jìn)制的玉雾,并且有三部分翔试。第一部分是"時(shí)間線(xiàn) ID",通常應(yīng)該保持相同复旬。第三部分不要選擇大于 255(0xFF)垦缅;應(yīng)該是在達(dá)到 255 的時(shí)候給第二部分增一然后重置第三部分為 0 。比如赢底,如果 00000001000000320000004A 是pg_xlog 里最大的條目失都,那么 -l 0x1,0x32,0x4B 就可以了;但如果最大的條目是000000010000003A000000FF 幸冻,那么選擇 -l 0x1,0x3B,0x0 或更多粹庞。
沒(méi)有很容易的辦法來(lái)判斷比數(shù)據(jù)庫(kù)中最大的 OID 大一號(hào)的下一個(gè) OID ,不過(guò)很走運(yùn)的是獲取正確的下一個(gè) OID 并非非常關(guān)鍵的事情洽损。
除了由 pg_resetxlog 設(shè)定的字段外庞溜,事務(wù) ID epoch 實(shí)際上并未存儲(chǔ)在數(shù)據(jù)庫(kù)里的任何地方。所以只要是涉及到數(shù)據(jù)庫(kù)自身的任何數(shù)值都有效碑定。你可能需要調(diào)整這個(gè)值以確保諸如 Slony-I 之類(lèi)的備份系統(tǒng)能夠正常工作流码。如果是這樣的話(huà),應(yīng)當(dāng)從下游已復(fù)制的數(shù)據(jù)庫(kù)中獲取恰當(dāng)?shù)闹怠?/p>
-n(無(wú)操作)開(kāi)關(guān)指示 pg_resetxlog 打印從 pg_control 重新構(gòu)造的數(shù)值然后不修改任何值就退出延刘。這主要是一個(gè)調(diào)試工具漫试,但是在 pg_resetxlog 真正處理前進(jìn)行的整潔性檢查的時(shí)候可能會(huì)有用。
注意
在服務(wù)器運(yùn)行的時(shí)候一定不要運(yùn)行這個(gè)命令碘赖。如果發(fā)現(xiàn)在數(shù)據(jù)文件目錄里有鎖文件驾荣,那么 pg_resetxlog 將拒絕啟動(dòng)。如果服務(wù)器崩潰普泡,那么可能會(huì)剩下一個(gè)鎖文件播掷;如果這樣,你可以刪除該鎖文件以便允許 pg_resetxlog運(yùn)行撼班。但是在你這么做之前歧匈,一定要確保沒(méi)有任何后端服務(wù)器進(jìn)程仍在運(yùn)行。
postgres
名稱(chēng)
postgres -- PostgreSQL 數(shù)據(jù)庫(kù)服務(wù)器
語(yǔ)法
postgres [option...]
描述
postgres 是 PostgreSQL 數(shù)據(jù)庫(kù)服務(wù)器砰嘁〖客戶(hù)端應(yīng)用程序?yàn)榱嗽L(fǎng)問(wèn)數(shù)據(jù)庫(kù)勘究,將通過(guò) TCP Socket 或 Unix domain socket 連接到一個(gè)運(yùn)行中的 postgres 進(jìn)程。然后該 postgres 實(shí)例將啟動(dòng)(fork)一個(gè)新的妻率、獨(dú)立的服務(wù)器進(jìn)程來(lái)處理這個(gè)連接乱顾。
一個(gè) postgres 總是管理來(lái)自同一個(gè)數(shù)據(jù)庫(kù)集群的數(shù)據(jù)。一個(gè)數(shù)據(jù)庫(kù)集群是一組在同一個(gè)文件系統(tǒng)位置("數(shù)據(jù)區(qū)")存放數(shù)據(jù)的數(shù)據(jù)庫(kù)宫静。一個(gè)系統(tǒng)上可以同時(shí)運(yùn)行多個(gè) postgres 進(jìn)程走净,只要他們使用不同的數(shù)據(jù)區(qū)和不同的端口號(hào)(見(jiàn)下文)。postgres 啟動(dòng)時(shí)需要知道數(shù)據(jù)區(qū)的位置孤里,該位置必須通過(guò) -D 選項(xiàng)或 PGDATA 環(huán)境變量指定伏伯。通常,-D 或 PGDATA 都直接指向由 initdb 創(chuàng)建的集群目錄捌袜。其他可能的文件布局在節(jié)17.2里面有討論说搅。
缺省時(shí) postgres 在前臺(tái)啟動(dòng)并將日志信息輸出到標(biāo)準(zhǔn)錯(cuò)誤。但在實(shí)際應(yīng)用中虏等,postgres 應(yīng)當(dāng)作為后臺(tái)進(jìn)程啟動(dòng)弄唧,而且多數(shù)是在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng)。
postgres 還能以單用戶(hù)模式運(yùn)行霍衫。這種用法的主要用于 initdb 的初始化過(guò)程中候引。有時(shí)候它也被用于調(diào)試災(zāi)難性恢復(fù)。不過(guò)敦跌,單用戶(hù)模式運(yùn)行的服務(wù)器并不適合于調(diào)試澄干,因?yàn)闆](méi)有實(shí)際的進(jìn)程間通訊和鎖動(dòng)作發(fā)生。當(dāng)從 shell 上以單用戶(hù)模式調(diào)用時(shí)柠傍,用戶(hù)可以輸入查詢(xún)麸俘,然后結(jié)果會(huì)在屏幕上以一種更適合開(kāi)發(fā)者閱讀(不適合普通用戶(hù))的格式顯示出來(lái)。在單用戶(hù)模式下惧笛,將把會(huì)話(huà)用戶(hù) ID 設(shè)為 1 并賦予超級(jí)用戶(hù)權(quán)限从媚。該用戶(hù)不必實(shí)際存在,因此單用戶(hù)模式運(yùn)行的服務(wù)器可以用于對(duì)某些意外損壞的系統(tǒng)表進(jìn)行手工恢復(fù)患整。
選項(xiàng)
postgres 接受下列命令行參數(shù)静檬。關(guān)于這些選項(xiàng)的更詳細(xì)討論請(qǐng)參考章17。你也可以通過(guò)設(shè)置一個(gè)配置文件來(lái)減少敲擊這些選項(xiàng)并级。有些(安全的)選項(xiàng)還可以從連接過(guò)來(lái)的客戶(hù)端設(shè)置,以一種應(yīng)用無(wú)關(guān)的方法僅對(duì)該會(huì)話(huà)生效侮腹。比如嘲碧,如果設(shè)置了 PGOPTIONS 環(huán)境變量,那么基于 libpq 的客戶(hù)端就都把那個(gè)字符串傳遞給服務(wù)器父阻,并被服務(wù)器解釋成 postgres 命令行選項(xiàng)愈涩。
通用用途
-A 0|1
打開(kāi)運(yùn)行時(shí)斷言檢查望抽,是檢測(cè)編程錯(cuò)誤的調(diào)試幫助。只有在編譯 PostgreSQL 時(shí)打開(kāi)了它履婉,你才能使用它煤篙。如果編譯時(shí)打開(kāi)了,缺省是打開(kāi)毁腿。
-B nbuffers
為服務(wù)器進(jìn)程分配和管理的共享內(nèi)存緩沖區(qū)數(shù)量辑奈。這個(gè)參數(shù)的缺省值是 initdb 自動(dòng)選擇的;參考節(jié)17.4.1獲取更多信息已烤。
-c name=value
設(shè)置一個(gè)命名的運(yùn)行時(shí)參數(shù)鸠窗。PostgreSQL 支持的配置參數(shù)在章17里描述。大多數(shù)其它命令行選項(xiàng)實(shí)際上都是這樣的參數(shù)賦值的短形式胯究。-c 可以出現(xiàn)多次從而設(shè)置多個(gè)參數(shù)稍计。
-d debug-level
設(shè)置調(diào)試級(jí)別。數(shù)值越高裕循,寫(xiě)到服務(wù)器日志的調(diào)試輸出越多臣嚣。取值范圍是 1 到 5 。還可以針對(duì)某次單獨(dú)的會(huì)話(huà)使用 -d 0 來(lái)防止從父 postgres 進(jìn)程繼承日志級(jí)別剥哑。
-D datadir
聲明數(shù)據(jù)目錄或者配置文件的文件系統(tǒng)路徑硅则。細(xì)節(jié)詳見(jiàn)節(jié)17.2。
-e
把缺省日期風(fēng)格設(shè)置為"European"星持,也就是說(shuō)用 DMY 規(guī)則解釋日期輸入抢埋,并且在一些日期輸出格式里日子在月份前面打印。參閱節(jié)8.5獲取更多細(xì)節(jié)督暂。
-F
關(guān)閉 fsync 調(diào)用以提高性能揪垄,但是要冒系統(tǒng)崩潰時(shí)數(shù)據(jù)毀壞的風(fēng)險(xiǎn)。聲明這個(gè)選項(xiàng)等效關(guān)閉了 fsync 參數(shù)逻翁。在使用之前閱讀詳細(xì)文檔饥努!
-h hostname
指定 postgres 偵聽(tīng)來(lái)自前端應(yīng)用 TCP/IP 連接的 IP 主機(jī)名或地址。數(shù)值也可以是一個(gè)用空格分隔的地址列表八回,或者 * 表示監(jiān)聽(tīng)所有可用的地址酷愧。空值表示不監(jiān)聽(tīng)任何 IP 地址缠诅,而只使用 Unix 域套接字與客戶(hù)端通信溶浴。缺省只監(jiān)聽(tīng) localhost 。聲明這個(gè)選項(xiàng)等效于設(shè)置 listen_addresses 配置參數(shù)管引。
-i
這個(gè)選項(xiàng)允許遠(yuǎn)程客戶(hù)通過(guò) TCP/IP(網(wǎng)際域套接字)與服務(wù)器通訊士败。沒(méi)有這個(gè)選項(xiàng),服務(wù)器將只接受本地連接。這個(gè)選項(xiàng)等效于在 postgresql.conf 中或者通過(guò) -h 選項(xiàng)將 listen_addresses 設(shè)為 *
這個(gè)選項(xiàng)已經(jīng)廢棄了谅将,因?yàn)樗荒軐?shí)現(xiàn) listen_addresses 的所有功能漾狼。所以最好直接設(shè)置 listen_addresses
-k directory
指定 postgres 偵聽(tīng)來(lái)自前端應(yīng)用連接的 Unix 域套接字的目錄。缺省通常是 /tmp 饥臂,但是可以在編譯的時(shí)候修改逊躁。
-l
這個(gè)選項(xiàng)使用 SSL 進(jìn)行的安全通訊。要使用這個(gè)選項(xiàng)隅熙,編譯 PostgreSQL 時(shí)你必須打開(kāi)了 SSL 支持稽煤。有關(guān)使用 SSL 的信息,請(qǐng)參考節(jié)16.7猛们。
-N max-connections
設(shè)置最多允許同時(shí)連接多少個(gè)客戶(hù)端(也就是最多同時(shí)運(yùn)行多少個(gè)服務(wù)器進(jìn)程)念脯。缺省值為 32 ,不過(guò)該值最大可以設(shè)置為系統(tǒng)所能承受的極限弯淘。請(qǐng)注意 -B 的值要求至少兩倍于 -N 的值绿店。參閱節(jié)16.4獲取有關(guān)大量客戶(hù)的系統(tǒng)資源需求。聲明這個(gè)選項(xiàng)等效于聲明 max_connections 配置參數(shù)庐橙。
-o extra-options
在 extra-options 里面指定的命令行選項(xiàng)將被傳遞給所有由這個(gè) postgres 派生的服務(wù)進(jìn)程假勿。如果選項(xiàng)字符串包含任何空白,那么整個(gè)字符串必須用引號(hào)界定态鳖。
反對(duì)使用該選項(xiàng)转培,所有服務(wù)器進(jìn)程的命令行選項(xiàng)都可以直接在 postgres 命令行上指定,不必這么麻煩浆竭。
-p port
指定 postgres 偵聽(tīng)客戶(hù)端連接的 TCP/IP 端口或本地 Unix domain socket 文件的擴(kuò)展浸须。缺省的端口號(hào)是環(huán)境變量 PGPORT 的值。如果 PGPORT 沒(méi)有設(shè)置邦泄,那么缺省是 PostgreSQL 編譯時(shí)指定的值(通常是 5432)删窒。如果你聲明了一個(gè)非缺省端口,那么所有前端應(yīng)用都必須用命令行選項(xiàng)或者 PGPORT 聲明同一個(gè)端口顺囊。
-s
在每條命令結(jié)束時(shí)打印時(shí)間信息和其它統(tǒng)計(jì)信息肌索。這個(gè)開(kāi)關(guān)對(duì)測(cè)試性能和調(diào)節(jié)緩沖區(qū)數(shù)量有好處。
-S work-mem
聲明內(nèi)部排序和散列在求助于臨時(shí)磁盤(pán)文件之前可以使用的內(nèi)存數(shù)量特碳。參閱節(jié)17.4.1里描述的配置變量work_mem
--name=value
設(shè)置一個(gè)命名的運(yùn)行時(shí)參數(shù)诚亚;其縮寫(xiě)形式是 -c
--describe-config
以制表符分隔的 COPY 格式,導(dǎo)出服務(wù)器內(nèi)部配置變量午乓、描述站宗、缺省值。設(shè)計(jì)它主要是給管理工具使用益愈。
半內(nèi)部選項(xiàng)
還有幾個(gè)其它的選項(xiàng)可以聲明份乒,主要用于調(diào)試用途。這些東西在這里列出只是給 PostgreSQL 系統(tǒng)開(kāi)發(fā)人員使用的。強(qiáng)烈反對(duì)使用這些選項(xiàng)或辖。另外這些選項(xiàng)的任何一項(xiàng)都可能在未來(lái)版本中消失而不加說(shuō)明。
-f { s | i | m | n | h }
禁止某種掃描和連接方法的使用:s 和 i 分別關(guān)閉順序和索引掃描枣接,而 n, m, h 分別關(guān)閉嵌套循環(huán)颂暇,融合(merge)和 Hash 連接。
順序掃描和嵌套循環(huán)都不可能完全被關(guān)閉但惶。 -fs 和 -fn 選項(xiàng)僅僅是在存在其它方法時(shí)阻礙優(yōu)化器使用這些方法罷了耳鸯。
-n
該選項(xiàng)主要用于調(diào)試導(dǎo)致服務(wù)器進(jìn)程異常崩潰的問(wèn)題。對(duì)付這種情況的一般策略是通知所有其它服務(wù)器進(jìn)程終止并重新初始化共享內(nèi)存和信號(hào)燈膀曾。這是因?yàn)橐粋€(gè)出錯(cuò)的服務(wù)器進(jìn)程可能在終止之前就已經(jīng)對(duì)共享的東西造成了破壞县爬。該選項(xiàng)指定 postgres 不重新初始化共享數(shù)據(jù)結(jié)構(gòu)。一個(gè)有經(jīng)驗(yàn)的系統(tǒng)程序員這時(shí)就可以使用調(diào)試器檢查共享內(nèi)存和信號(hào)燈狀態(tài)添谊。
-O
允許修改系統(tǒng)表的結(jié)構(gòu)财喳。這個(gè)參數(shù)用于 initdb
-P
讀取系統(tǒng)表時(shí)忽略系統(tǒng)索引(但在更改數(shù)據(jù)時(shí)仍然更新索引)。這對(duì)于從索引已經(jīng)損壞的系統(tǒng)表中回復(fù)是很有幫助的斩狱。
-t pa[rser] | pl[anner] | e[xecutor]
打印與每個(gè)主要系統(tǒng)模塊相關(guān)的查詢(xún)記時(shí)統(tǒng)計(jì)耳高。它不能和 -s 選項(xiàng)一起使用。
-T
該選項(xiàng)主要用于調(diào)試導(dǎo)致服務(wù)器進(jìn)程異常崩潰的問(wèn)題所踊。對(duì)付這種情況的一般策略是通知所有其它服務(wù)器進(jìn)程終止并重新初始化共享內(nèi)存和信號(hào)燈泌枪。這是因?yàn)橐粋€(gè)出錯(cuò)的服務(wù)器進(jìn)程可能在終止之前就已經(jīng)對(duì)共享的東西造成了破壞。該選項(xiàng)指定 postgres 通過(guò)發(fā)送 SIGSTOP 信號(hào)停止其他所有服務(wù)器進(jìn)程秕岛,但是并不讓它們退出碌燕。這樣就允許系統(tǒng)程序員手動(dòng)從所有服務(wù)器進(jìn)程搜集內(nèi)核轉(zhuǎn)儲(chǔ)。
-v protocol
聲明這次會(huì)話(huà)使用的前/后服務(wù)器協(xié)議的版本數(shù)继薛。該選項(xiàng)僅在內(nèi)部使用修壕。
-W seconds
一旦看見(jiàn)這個(gè)選項(xiàng),進(jìn)程就睡眠標(biāo)出的秒數(shù)惋增。這樣就給開(kāi)發(fā)者一些時(shí)間把調(diào)試器附著在該服務(wù)器進(jìn)程上叠殷。
-y database
表明這是一個(gè)由父 postgres 進(jìn)程啟動(dòng)的子進(jìn)程,并使用指定的數(shù)據(jù)庫(kù)诈皿。該選項(xiàng)僅供內(nèi)部使用林束。
單用戶(hù)模式的選項(xiàng)
下面的選項(xiàng)僅在單用戶(hù)模式下可用。
--single
選中單用戶(hù)模式稽亏。這個(gè)必須是命令行中的第一個(gè)選項(xiàng)壶冒。
database
要訪(fǎng)問(wèn)的數(shù)據(jù)庫(kù)名字。如果忽略掉則缺省為用戶(hù)名截歉。
-E
回顯所有命令
-j
禁止使用新行作為語(yǔ)句分隔符
-r filename
將所有服務(wù)器輸出日志保存到 filename 中胖腾。在多用戶(hù)模式下該選項(xiàng)將被忽略,所有進(jìn)程都將使用 stderr
環(huán)境變量
PGCLIENTENCODING
客戶(hù)端使用的缺省字符編碼∠套鳎客戶(hù)端可以獨(dú)立地覆蓋它锨阿。這個(gè)值也可以在配置文件里設(shè)置。
PGDATA
缺省數(shù)據(jù)目錄位置
PGDATESTYLE
運(yùn)行時(shí)參數(shù) DateStyle 的缺省值〖欠#現(xiàn)在反對(duì)使用該環(huán)境變量墅诡。
PGPORT
缺省端口(最好在配置文件中設(shè)置)
TZ
服務(wù)器的時(shí)區(qū)
診斷
一個(gè)提到了 semget 或 shmget 的錯(cuò)誤信息可能意味著你需要重新配置你的內(nèi)核,提供足夠的共享內(nèi)存和信號(hào)燈桐智。更多討論末早,參閱節(jié)16.4。你也可以通過(guò)降低 shared_buffers 值以減少 PostgreSQL 的共享內(nèi)存的消耗说庭,或者降低 max_connections 值減少 PostgreSQL 的信號(hào)燈的消耗然磷。
如果碰到一個(gè)說(shuō)另外一個(gè)服務(wù)器正在運(yùn)行的錯(cuò)誤信息,可以根據(jù)不同的系統(tǒng)使用命令
$ ps ax | grep postgres
或
$ ps -ef | grep postgres
如果確信沒(méi)有沖突的服務(wù)器正在運(yùn)行刊驴,那么你可以刪除消息里提到的鎖文件然后再次運(yùn)行姿搜。
抱怨無(wú)法綁定端口的錯(cuò)誤信息可能表明該端口已經(jīng)被其它非 PostgreSQL 進(jìn)程使用。如果終止 postgres 后又馬上用同一個(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ù)可以使用它們雇锡。
注意
如果有可能,不要使用 SIGKILL 殺死主 postgres 服務(wù)器進(jìn)程僚焦。這樣會(huì)阻止 postgres 在退出前釋放它持有的系統(tǒng)資源(例如共享內(nèi)存和信號(hào)燈)锰提。這樣可能會(huì)影響到將來(lái)啟動(dòng)新的 postgres 進(jìn)程。
可以使用 SIGTERM, SIGINT, SIGQUIT 信號(hào)正常結(jié)束 postgres 服務(wù)器進(jìn)程芳悲。第一個(gè)信號(hào)將等待所有的客戶(hù)端退出后才退出立肘。第二個(gè)將強(qiáng)制斷開(kāi)所有客戶(hù)端,而第三個(gè)將不停止立刻退出名扛,導(dǎo)致在重啟時(shí)的恢復(fù)運(yùn)行谅年。SIGHUP會(huì)重新加載服務(wù)器配置文件。也可以向一個(gè)單獨(dú)的服務(wù)器進(jìn)程發(fā)送 SIGHUP 信號(hào)肮韧,但是這樣做沒(méi)什么意義融蹂。
pg_ctl 工具可以用于安全而有效地啟停 postgres 旺订,推薦使用。
要推出一個(gè)正在運(yùn)行的查詢(xún)超燃,可以向正在執(zhí)行該查詢(xún)的進(jìn)程發(fā)送 SIGINT 信號(hào)区拳。
主 postgres 服務(wù)器進(jìn)程向子進(jìn)程發(fā)送 SIGTERM 信號(hào)讓它們正常退出;發(fā)送 SIGQUIT 信號(hào)立即退出且不做清理工作淋纲,用戶(hù)應(yīng)當(dāng)盡量避免使用該信號(hào)劳闹。同時(shí),發(fā)送 SIGKILL 信號(hào)也是不明智的:主 postgres 進(jìn)程將把這個(gè)信號(hào)當(dāng)作崩潰信號(hào)洽瞬,然后會(huì)強(qiáng)制其他兄弟進(jìn)程作為標(biāo)準(zhǔn)的崩潰回復(fù)過(guò)程退出。
臭蟲(chóng)
-- 選項(xiàng)在 FreeBSD 或 OpenBSD 上無(wú)法運(yùn)行业汰,應(yīng)該使用 -c 伙窃。這在受影響的系統(tǒng)里是個(gè)臭蟲(chóng);如果這個(gè)毛病沒(méi)有修補(bǔ)好样漆,將來(lái)的 PostgreSQL 版本將提供一個(gè)繞開(kāi)的辦法为障。
用法
啟動(dòng)一個(gè)單用戶(hù)模式的服務(wù)器:
postgres --single -D /usr/local/pgsql/data other-options my_database
用 -D 給服務(wù)器提供正確的數(shù)據(jù)庫(kù)目錄的路徑,或者確保環(huán)境變量 PGDATA 已經(jīng)正確設(shè)置放祟。同時(shí)還要聲名你想用的特定數(shù)據(jù)庫(kù)名字鳍怨。
通常,獨(dú)立運(yùn)行的服務(wù)器把換行符當(dāng)做命令輸入完成字符跪妥;它還不懂分號(hào)的作用鞋喇,因?yàn)槟切〇|西是在 psql 里的。要想把一行分成多行寫(xiě)眉撵,你必需在除最后一個(gè)換行符以外的每個(gè)換行符前面敲一個(gè)反斜杠侦香。
但是如果使用了 -j 命令行選項(xiàng),新行將不被當(dāng)作命令結(jié)束符纽疟。此時(shí)服務(wù)器將從標(biāo)準(zhǔn)輸入一直讀取到 EOF 標(biāo)志為止罐韩,然后把把所有讀到的內(nèi)容當(dāng)作一個(gè)完整的命令字符串看待,并且反斜杠與換行符也被當(dāng)作普通字符來(lái)看待污朽。
輸入 EOF(Control+D)即可退出會(huì)話(huà)散吵。如果你已經(jīng)使用了 -j 則必須連續(xù)使用兩個(gè) EOF 才行。
請(qǐng)注意單用戶(hù)模式運(yùn)行的服務(wù)器不會(huì)提供復(fù)雜的行編輯功能(比如蟆肆,沒(méi)有命令行歷史)矾睦。
例子
用缺省值在后臺(tái)啟動(dòng) postgres :
$ nohup postgres >logfile 2>&1 </dev/null &
在指定的端口啟動(dòng) postgres :
$ postgres -p 1234
這條命令將在端口 1234 啟動(dòng) postgres 。你應(yīng)該這樣使用 psql 與之連接:
$ psql -p 1234
或者設(shè)置環(huán)境變量 PGPORT :
psql
命名的運(yùn)行時(shí)參數(shù)可以用下列的風(fēng)格之一設(shè)置:
postgres --work-mem=1234
兩種形式都覆蓋那些現(xiàn)有的在 postgresql.conf 里面的 work_mem 設(shè)置颓芭。請(qǐng)注意在參數(shù)名里的下劃線(xiàn)在命令行上可以寫(xiě)成下劃線(xiàn)顷锰,也可以寫(xiě)成連字符。除了用于短期的實(shí)驗(yàn)以外亡问,更好的習(xí)慣是編輯 postgresql.conf 里面的設(shè)置官紫,而不是倚賴(lài)命令行開(kāi)關(guān)設(shè)置參數(shù)肛宋。
又見(jiàn)
initdb, pg_ctl
postmaster
Name
postmaster -- PostgreSQL 數(shù)據(jù)庫(kù)服務(wù)器
Synopsis
postmaster [option...]
Description
postmaster 是 postgres 的別名,反對(duì)使用束世。
又見(jiàn)
postgres