?
This document uses PHP Chinese website manual Release
psql [option...] [dbname [username]]
psql是一個以終端為基礎(chǔ)的PostgreSQL前端。它允許你交互地鍵入查詢,然后把它們發(fā)出給PostgreSQL, 再顯示查詢的結(jié)果。另外,輸入可以來自一個文件。還有,它提供了一些元命令和多種類似shell的特性來實現(xiàn)書寫腳本以及對大量任務(wù)的自動化。
在讀取行時向標(biāo)準(zhǔn)輸出打印所有內(nèi)容。這個選項在腳本處理時比交互模式時更有用。 這個選項等效于設(shè)置ECHO變量為all。
切換為非對齊輸出模式。缺省輸出模式是對齊的。
聲明psql將執(zhí)行一條查詢字符串command,然后退出。 Start-up files (psqlrc and ~/.psqlrc) are ignored with this option.
command必須是一條完全可以被服務(wù)器分析的字符串(也就是不包含psql特有的特性), 或者是一個反斜杠命令。這樣你就不會混合SQL和psql元命令。要想混合使用, 你可以把字符串重定向到psql里, 像這樣:echo '\x \\ SELECT * FROM foo;' | psql(\\用于隔開元命令)。
如果命令字符串包含多個SQL命令,那么他們將在一個事務(wù)里處理, 除非在字符串里包含了明確的BEGIN/COMMIT命令把他們分成多個事務(wù)。 這個和從psql的標(biāo)準(zhǔn)輸入里給它填充相同字符串不同。
指定要連接的數(shù)據(jù)庫的名稱。這等價于指定dbname 作為命令行中的第一個非選項參數(shù)。
若該參數(shù)包含一個=符號,它會被當(dāng)做conninfo字符串。 請參閱Section 31.1獲取詳細(xì)信息。
把所有發(fā)送給服務(wù)器的查詢同時也回顯到標(biāo)準(zhǔn)輸出。等效于把變量ECHO設(shè)置為 queries。
回顯由\d和其它反斜杠命令生成的實際查詢。你可以使用這個命令學(xué)習(xí) psql的內(nèi)部操作。 這等效于在psql里設(shè)置變量ECHO_HIDDEN。
使用filename作為命令的語句源而不是交互式讀入查詢。 psql將在處理完文件后結(jié)束。這個選項在很多方面等效于內(nèi)部命令 \i。
如果filename是-(連字符),則從標(biāo)準(zhǔn)輸入讀取。
使用這個選項與使用filename 有微小的區(qū)別。 通常,兩者都回按照你預(yù)期那樣運行,但是使用-f打開了一些很好的特性, 比如帶行號的錯誤信息。而且,使用這個選項還可能減小啟動的開銷。 另一方面,如果你把所有內(nèi)容手工輸入,使用shell輸入定向的方式(理論上)能保證生成和你已經(jīng)得到的 完全一樣的輸出。
使用separator作為未對齊輸出的域分隔符。 等效于\pset fieldsep或\f。
指定正在運行服務(wù)器的主機名。如果主機名以斜杠開頭,則它被用作到Unix域套接字的路徑。
打開HTML格式輸出。等效于\pset format html或 \H命令。
列出所有可用的數(shù)據(jù)庫,然后退出。其它非連接選項將被忽略。類似于內(nèi)部命令 \list。
除了正常的輸出源之外,把所有查詢輸出記錄到文件filename。
不要使用readline來做行編輯并且不要使用history。這有助于在剪切和粘貼時關(guān)閉標(biāo)簽擴展。
將所有查詢輸出重定向到文件filename。這個選項等效于\o命令。
指定服務(wù)器偵聽的TCP端口或本地Unix域套接字文件的擴展。缺省使用環(huán)境變量PGPORT的值, 如果沒有設(shè)置的話則使用編譯時聲明的端口(通常是5432)。
以\pset的風(fēng)格設(shè)置打印選項。要注意的是你在這里必須用等號而不 是空格分割名稱和值。 例如,要把輸出格式設(shè)置為LaTeX,你可以敲入-P format=latex。
安靜地執(zhí)行處理任務(wù)。缺省時psql將打印歡迎和許多其它輸出信息。 如果使用了此選項,這些都不會出現(xiàn)。這在和-c選項一起使用時很有效。 在psql里可以通過設(shè)置QUIET變量實現(xiàn)同樣效果。
使用separator做為非對齊輸出的記錄分隔符。 等效于\pset recordsep命令。
單步模式運行。意味著每個查詢在發(fā)往服務(wù)器之前都要提示用戶,用這個選項也可以取消執(zhí)行。 此選項主要用于調(diào)試腳本。
單行運行模式,這時每個命令都將由換行符結(jié)束,像分號那樣。
Note: 這個模式是給那些堅持要使用這個特性的人保留的, 不鼓勵你這么用。實際上,如果你在一行里混合使用SQL和元命令, 執(zhí)行的順序?qū)Σ皇炀毜挠脩舳圆⒉豢偸乔逦摹?
關(guān)閉打印列名稱和結(jié)果行計數(shù)腳注等信息。等效于\t命令。
聲明放在HTML table
標(biāo)簽里的選項。參閱\pset獲取細(xì)節(jié)。
以用戶username代替缺省用戶與數(shù)據(jù)庫連接。當(dāng)然,你必須有這么做的權(quán)限。
像內(nèi)部命令\set那樣進(jìn)行一次變量分配。注意,如果有變量名和值的話, 你必須在命令行上用等號分隔它們。去掉等號則重置變量。 要設(shè)置一個沒有值的變量,可以保留等號但是不指定值。 這個分配是在啟動之初進(jìn)行的,所以為內(nèi)部使用而保留的變量可能被再次覆蓋。
打印psql版本信息然后退出。
從不提示密碼。如果服務(wù)器請求密碼身份認(rèn)證并且一個密碼不能通過其他方式(如.pgpass 文件)來獲得,該鏈接嘗試就會失敗。該選項在沒有用戶可以輸入密碼時對批量作業(yè)和腳本中是有效的。
請注意該選項將仍然為整個會話設(shè)置,所以會影響元命令 \connect的使用,以及初始連接嘗試的使用。
強制psql在與一個數(shù)據(jù)庫連接前提示輸入口令。
該選項從來不是至關(guān)重要的,因為若服務(wù)器請求密碼身份認(rèn)證psql 將會自動提示一個密碼。然而,psql將浪費一個連接嘗試發(fā)現(xiàn) 服務(wù)器需要一個密碼。在一些情況下,值得輸入-W來避免額外的連接嘗試。
請注意該選項將仍然為整個會話設(shè)置,所以會影響元命令 \connect,以及初始連接嘗試的使用。
打開擴展表格式模式。等效于\x 命令。
不讀取啟動文件(系統(tǒng)范圍的psqlrc或者你自己的~/.psqlrc都不讀取)。
當(dāng)psql使用-f選項執(zhí)行腳本時,使用這個選項將導(dǎo)致在腳本的開頭和結(jié)尾分別加上BEGIN/COMMIT來把整個腳本當(dāng)作一個事務(wù)執(zhí)行。 這將保證該腳本要么完全執(zhí)行成功,要么不產(chǎn)生任何影響。
如果在腳本中已經(jīng)使用了BEGIN,COMMIT,ROLLBACK, 那么該選項將不會得到期望的效果。同樣, 如果腳本中包含任何不能在事務(wù)塊內(nèi)部使用的命令, 使用這個選項將導(dǎo)致這樣的命令執(zhí)行失敗,當(dāng)然整個事務(wù)亦將失敗。
顯示關(guān)于psql命令行參數(shù)的幫助然后退出。
如果正常結(jié)束,那么psql向shell返回0,如果自身發(fā)生致命錯誤, 則返回1(例如,內(nèi)存用盡,未找到文件等),如果和數(shù)據(jù)庫的連接失效而且會話不再活躍則返回2, 如果腳本中發(fā)生錯誤并且設(shè)置了ON_ERROR_STOP則返回3。
psql是一個普通的PostgreSQL客戶端應(yīng)用。為了與一個數(shù)據(jù)庫連接, 你需要知道目標(biāo)數(shù)據(jù)庫、服務(wù)器的主機名和端口號、以及你希望以哪個用戶的身份進(jìn)行連接等信息。 可以通過命令行參數(shù)-d,-h,-p,-U告訴psql這些信息。如果某個參數(shù)不屬于任何選項, 那么它會被解釋成數(shù)據(jù)庫名或者是用戶名(如果數(shù)據(jù)庫名稱已經(jīng)給出了)。不是所有這些選項都是必須的, 有的缺省就存在。如果你省略主機名,psql將通過Unix域套接字與本地主機的服務(wù)器相聯(lián), 或者在沒有Unix域套接字的機器上,通過TCP/IP與localhost連接。缺省的端口號是編譯時確定的。 因為數(shù)據(jù)庫服務(wù)器使用同樣的缺省值,所以在大多數(shù)設(shè)置下,你可能不需要聲明端口號。缺省的用戶名是你的Unix用戶名, 與數(shù)據(jù)庫同名。要注意的是你不能用任意用戶名與任何數(shù)據(jù)庫相聯(lián)。你的數(shù)據(jù)庫管理員應(yīng)該告訴你有哪些訪問權(quán)限。
如果缺省不太正確,那么你可以通過設(shè)置幾個環(huán)境變量PGDATABASE,PGHOST, PGPORT和/或者PGUSER, 的方法節(jié)約幾次敲擊。其它環(huán)境變量的信息,參閱Section 31.13。另外, 用一個~/.pgpass文件來避免輸入密碼也是很方便的。參閱Section 31.14獲取更多信息。
聲明連接參數(shù)的另一種方法是在一個conninfo字符串中, 這是用來代替一個數(shù)據(jù)庫名稱。這一機制給您在連接上的非常廣泛的控制。例如:
$ psql "service=myservice sslmode=require"
像Section 31.16中描述的一樣,您也可以使用LDP來做連接參數(shù)查找。 請參閱Section 31.1獲取關(guān)于所有可獲得的連接選項的信息。
如果因為任何原因而無法與數(shù)據(jù)庫相聯(lián)(權(quán)限不夠、服務(wù)器沒有運行等), psql將返回一個錯誤并退出。
通常狀況下,psql提供一個帶有正在與之連接的接數(shù)據(jù)庫名的, 后綴=>的提示符。例如:
$ psql testdb psql (9.0.4) Type "help" for help. testdb=>
用戶可以在這個提示符下鍵入SQL命令。通常, 輸入的行將在命令終止分號出現(xiàn)時送到服務(wù)器。 一行的終止并不表示命令的結(jié)束。因此命令可以為了清晰起見跨越好幾行。 如果命令發(fā)送出去而且執(zhí)行沒有錯誤,命令結(jié)果會顯示在屏幕上。
當(dāng)命令正在進(jìn)行時,psql同樣還輪詢由 LISTEN和NOTIFY生成的異步通知信號。
你在psql里輸入的任何以不帶引號的反斜杠開頭的東西都是psql元命令, 這些命令是將由psql自己處理的。這些命令也是使得psql更便于管理或書寫腳本的原因。 元命令更常見的叫法是斜杠或反斜杠命令。
一個psql命令的格式是反斜杠后面緊跟一個命令動詞,然后是任意參數(shù)。參數(shù)與命令動詞和其它參數(shù)以任意個空白字符間隔。
要在參數(shù)里面包含空白,你必須用單引號把它包圍起來。要在這樣的參數(shù)里包含單引號, 可以在前面加一個反斜杠。任何包含在單引號里的東西都會被進(jìn)一步進(jìn) 行類C的替換:\n(新行)、\t(制表符)、 \digits(八進(jìn)制表示的字符)、\xdigits(十六進(jìn)制表示的字符)。
如果一個不帶引號的參數(shù)以冒號(:)開頭, 它會被當(dāng)作一個psql變量,并且該變量的值會最終成為真正的參數(shù)值。 如果變量名使用單引號引起來的(例如::'var'),它將轉(zhuǎn)義成一個 SQL文本并且結(jié)果將被用作這個參數(shù)。如果變量名用雙引號引,它將會被轉(zhuǎn)義成一個SQL標(biāo)示符 并且結(jié)果將會用作參數(shù)。
用反勾號(`)包圍的內(nèi)容被當(dāng)作一個命令行傳入shell。該命令的輸出(刪除了結(jié)尾的新行)被當(dāng)作參數(shù)值。 上面描述的逃逸(字符)序列在反勾號里也生效。
有些命令以一個SQL標(biāo)識的名稱(比如一個表名)為參數(shù)。 這些參數(shù)遵循SQL語法關(guān)于雙引號的規(guī)則:不帶雙引號的標(biāo)識強制成小寫, 而雙引號保護字母不進(jìn)行大小寫轉(zhuǎn)換,并且允許在標(biāo)識符中使用空白。 在雙引號中,成對的雙引號在結(jié)果名字中分析成一個雙引號。 比如,FOO"BAR"BAZ解析成fooBARbaz ; 而"A weird"" name"解析成A weird" name。
、 對參數(shù)的分析在line的最后或者碰到另一個不帶引號的反斜杠時停止。 不帶引號的反斜杠會認(rèn)為是一個新的元命令的開始。 特殊的雙反斜杠序列(\\)標(biāo)識參數(shù)的結(jié)尾并將繼續(xù)分析后面的SQL命令(如果存在的話)。 這樣SQL和psql命令可以自由的在一行里面混合。 但是在任何情況下,一條元命令的參數(shù)不能延續(xù)超過行尾。
下面是已定義的元命令:
如果目前的表輸出格式是不對齊的,則切換成對齊的。如果是對齊的,則切換成不對齊。這條命令是為了向后兼容。 參閱\pset獲取一個更通用的解決方法。
把當(dāng)前工作目錄改變到directory。沒有參數(shù)則是改變到當(dāng)前用戶的家目錄。
Tip: 使用\! pwd打印出當(dāng)前工作目錄。
把正在打印的表的標(biāo)題設(shè)置為一個查詢的結(jié)果或者取消這樣的設(shè)置。 這條命令等效于\pset title title。這條命令的名稱源于"caption", 因為以前只是用于在一個HTML表格里面設(shè)置標(biāo)題。
與一個新的數(shù)據(jù)庫建立一個連接,使用/不用一個用戶名。 前面的連接將關(guān)閉。如果dbname,username,host,port被省略或是-, 那么就使用上次連接里面的值。 如果之前沒有鏈接則使用libpq的缺省值。
如果連接失敗(用戶名錯、訪問被拒絕等), 那么當(dāng)psql處于交互模式時將保留前面的連接。 如果運行的是非交互的腳本,處理會馬上停止并返回一個錯誤。 設(shè)置這樣的區(qū)別一方面是為用戶使用方便考慮, 另一方面也為了保證腳本不會碰巧操作了錯誤的數(shù)據(jù)庫的安全機制考慮。
執(zhí)行前端(客戶端)拷貝。這是一個運行SQL COPY命令的操作,不同的是服務(wù)器在讀寫指明的文件, 而psql讀寫文件并作為本地的文件系統(tǒng)和服務(wù)器之間的跳板取出或?qū)懭霐?shù)據(jù)。 這意味著文件訪問性和權(quán)限都是本地用戶的,而不是服務(wù)器的, 因此不需要SQL超級用戶權(quán)限。
這條命令的語法是模擬SQL COPY命令的。 要注意的是因此帶來一些應(yīng)用于\copy命令的特殊分 析規(guī)則(尤其是變量替換規(guī)則和反斜杠代換規(guī)則)將不起作用。
\copy ... from stdin | to stdout分別基于命令輸入和輸出進(jìn)行讀/寫。 所有行都從發(fā)出命令的同一個源讀取,直到讀到了\.或者流達(dá)到EOF。 輸出發(fā)送到和命令輸出相同的位置。要從psql的標(biāo)準(zhǔn)輸入或者輸出讀/寫, 可以使用pstdin或pstdout。這個選項用于把和SQL腳本嵌 在一起的文件填充表很有用。
Tip: 此操作不像SQL COPY命令這樣高效,因為所有數(shù)據(jù)必須通過客戶端/服務(wù)器連接。 對于大數(shù)據(jù)量的操作,SQL命令的方法更可行。
顯示PostgreSQL的版權(quán)和版本信息。
對于每個匹配pattern的關(guān)系(表、視圖、索引、序列), 顯示所有列、它們的類型、表空間(如果不是缺省的)和任何特 殊屬性(諸如NOT NULL或缺省等,只要存在)。 唯一約束相關(guān)的索引、規(guī)則、約束、觸發(fā)器也同樣顯示出來。 如果關(guān)系是一個視圖,還顯示視圖的定義。 "匹配模式"在下面定義Patterns。
從\d+來的命令也是一樣的,只不過顯示更多信息: 任何與表的列關(guān)聯(lián)的注釋也都會顯示, 還有就是表中出現(xiàn)的 OID,and the view definition if the relation is a view.
缺省時,僅顯示用戶創(chuàng)建的對象;提供一個模式或者S修飾符 來包括系統(tǒng)對象。
Note: 如果如果不帶任何pattern 調(diào)用\d,那么等效于\dtvs, 將顯示一個所有表,視圖和序列的列表。這完全是出于方便的考慮。
列出聚合函數(shù),連同其返回類型機及其操作的數(shù)據(jù)類型。如果pattern已聲明,只有名稱匹配模式的聚集 會顯示。缺省時,僅顯示用戶創(chuàng)建的對象;提供一個模式或者S 修飾符來包括對象。
列出所有可用的表空間。如果聲明了pattern, 那么只顯示那些匹配模式的表空間。如果在命令名上附加了+, 那么每個對象都和與之相關(guān)的權(quán)限一起列出。
列出所有字符集之間的可用轉(zhuǎn)換。 如果聲明了pattern, 則只列出那些匹配模式的轉(zhuǎn)換。 缺省時,僅顯示用戶創(chuàng)建的對象;提供一個模式或者S 修飾符來包括對象。
如果指定pattern, 只有資源或者目標(biāo)類型匹配模式的投射會列出。
顯示所有匹配pattern的描述,如果沒有給出參數(shù),顯示所有可視對象。 但是不管怎樣,只有那些有描述內(nèi)容的對象才顯示出來。 By default, only user-created objects are shown; supply a pattern or the S modifier to include system objects. "對象"包括:聚集,函數(shù),操作符, 類型,關(guān)系(表,視圖,索引,序列,大對象), 規(guī)則,觸發(fā)器。例如:
=> \dd version Object descriptions Schema | Name | Object | Description ------------+---------+----------+--------------------------- pg_catalog | version | function | PostgreSQL version string (1 row)
可以用COMMENTSQL命令生成對象的描述。
列出默認(rèn)訪問權(quán)限設(shè)置。一個條目顯示每個角色(以及模式,若適用),多這些角色來說 默認(rèn)權(quán)限設(shè)置已經(jīng)從內(nèi)置缺省情況發(fā)生了改變。如果指定了 pattern,只有角色名或者模式名匹配 模式的條目被列出。
ALTER DEFAULT PRIVILEGES命令是用于設(shè)置默認(rèn)訪問權(quán)限的。 權(quán)限顯示的意義在GRANT下有解釋。
它列出域名。若聲明pattern, 只有名稱匹配模式的域名會顯示。缺省時,僅顯示用戶創(chuàng)建的對象; 提供一個模式或者S修飾符來包括系統(tǒng)對象。
它列出外服務(wù)器(助記符:"external servers")。 若指定pattern,只有名稱匹配 模式的服務(wù)器會列出。如果使用\des+形式,會顯示每個服務(wù)器的 一個完整描述,包括服務(wù)器的ACL、類型、版本和選項。
它列出用戶映射(助記符:"external users")。 若指定pattern,只有名稱匹配 模式的映射會列出。如果使用\deu+形式,會顯示關(guān)于映射的 額外信息。
Caution |
\deu+也會顯示用戶名和遠(yuǎn)程用戶密碼,所以應(yīng)該小心以免披露了這些信息。 |
它列出外部數(shù)據(jù)封裝器(助記符:"external wrappers")。 若指定pattern,只有名稱匹配 模式的外部數(shù)據(jù)封裝器會列出。如果使用\dew+形式,會顯示 外部數(shù)據(jù)封裝器的ACL和選項。
列出函數(shù)及其參數(shù)、返回類型和函數(shù)類型,它們被分為"agg" (聚集), "normal", "trigger",或者"window"。僅顯示特定類型的 函數(shù),添加相應(yīng)字母到a,n, t或者w 到命令。若指定pattern,僅顯示名稱匹 配模式的函數(shù)。若使用\df+格式,關(guān)于每個函數(shù)的額外信息,包括 包括易變性、語言、源碼和描述,都會顯示。缺省時,僅顯示用戶創(chuàng)建的對象; 提供一個模式或者S來包括系統(tǒng)對象。
Tip: 為了查找有特定類型的參數(shù)或者返回值的函數(shù),使用您的頁面調(diào)度程序的搜索能力來 滾動\df輸出。
它列出文本搜索配置。若指定pattern,只有名稱匹配 模式的配置會顯示。如果使用\dF+形式,會顯示每個配置的完整描述, 包括底層的文本搜索解析器和每個解析器token類型的字典列表。
它列出文本搜索字典。若指定pattern,只有名稱匹配 模式的字典會顯示。如果使用\dFd+形式,會顯示每個被選中的字典的額外信息, 包括包括底層文本搜索模板和選項值。
它列出文本搜索解析器。若指定pattern,只有名稱匹配 模式的解析器會顯示。如果使用\dFp+形式,會顯示每個解析器的完整描述, 包括包括底層函數(shù)和公認(rèn)的token類型。
它列出文本搜索模板。若指定pattern,只有名稱匹配 模式的模板會顯示。如果使用\dFt+形式,會顯示關(guān)于每個模板的附加信息, 包括包括底層函數(shù)名稱。
列出數(shù)據(jù)庫角色。 如果聲明了pattern, 那么只顯示那些匹配模式的名字。這條命令實際上等于\du。 如果格式\dg+被使用,會顯示關(guān)于每個角色的附加信息, 包括每個角色的注釋。
在這組命令中,字母 i, s, t和v分別代表索引、序列、表和視圖。 您可以按任意順序聲明任何或全部的這些字母,來獲得一個這些類型的對象的清單。 例如,\dit列出索引和表。如果+附加到命令名, 若存在,每個對象會按它在磁盤上的實際大小以及其相關(guān)描述來描述。 如果聲明了pattern,那么只列出匹配模式的對象。 缺省時,僅顯示用戶創(chuàng)建的對象;提供一個模式或者S修飾符來包括系統(tǒng)對象。
\lo_list的別名,顯示一個大對象的列表。
列出所有可用模式(名字空間)。如果聲明了pattern, 那么只列出匹配模式的模式名。不顯示非本地的臨時模式。 如果在命令名上附加了+,那 么每個對象都和與之相關(guān)的權(quán)限和注釋一起列出(如果有的話)。
列出所有可用操作符,以及它們的操作數(shù)和返回的數(shù)據(jù)類型。 如果聲明了pattern, 那么只顯示匹配模式的操作符。 缺省時僅顯示用戶創(chuàng)建的對象;提供一個模式或者S修飾符來包含系統(tǒng) 對象。
一列表,視圖,序列和它們相關(guān)的權(quán)限。 如果聲明了pattern, 那么只列出名字匹配模式的表。
GRANT和REVOKE命令用于設(shè)置訪問權(quán)限。 權(quán)限顯示的意義在GRANT下有解釋。
列出定義的配置設(shè)置。這些設(shè)置可以是特定角色、特定數(shù)據(jù)庫或者兩者都是。 role-pattern和database-pattern 通常用于選擇特定角色和數(shù)據(jù)庫分別列出來。如果省略,或者如果指定*, 所有的設(shè)置都會列出來,分別包括那些不是特定角色或者特定數(shù)據(jù)庫的。
ALTER ROLE和ALTER DATABASE命令式用來定義 每角色和每數(shù)據(jù)庫配置設(shè)置。
列出數(shù)據(jù)類型。如果聲明了pattern, 那么只顯示匹配模式的類型。如果+被添加到命令名稱上,每個類型 按其內(nèi)部名稱和大小列出,以及其允許的數(shù)值(若是enum類型)。 缺省時僅顯示用戶創(chuàng)建的對象;提供一個模式或者S修飾符來包含系統(tǒng) 對象。
列出數(shù)據(jù)角色。如果聲明了pattern, 那么只名稱顯示匹配模式的角色名。如果使用\du+格式, 會顯示關(guān)于每個角色的附加信息,包括對每個角色的注釋。
如果聲明了filename, 則編輯此文件并且在編輯器退出后將其內(nèi)容拷貝回查詢緩沖區(qū)。 如果沒有給出此參數(shù), 則把當(dāng)前查詢緩沖區(qū)內(nèi)容拷貝到一個臨時文件然后以相同方式編輯。
然后根據(jù)一般的psql規(guī)則重新分析查詢緩沖區(qū), 這時整個緩沖區(qū)當(dāng)作一個單行, 因此你無法用這個方法制作腳本(用\i)。 這還意味著如果該查詢以分號結(jié)尾(或者包含分號), 它就會馬上被執(zhí)行。否則它只是在查詢緩沖區(qū)里等待。
Tip: psql以PSQL_EDITOR,EDITOR, VISUAL順序搜索環(huán)境變量查找要用到哪個編輯器。 如果上面的都沒有設(shè)置,那么在Unix系統(tǒng)上使用vi, 而在Windows系統(tǒng)上用notepad.exe。
該命令提取并編輯命名的函數(shù)的定義,以一個CREATE OR REPLACE FUNCTION 命令的形式。以對\e相同的方式編輯。退出編輯器后,更新命令會在 查詢緩沖區(qū)等待;類型分號或者要發(fā)送它的\g ,或者用來取消的\r。
目標(biāo)函數(shù)可以僅通過名稱來聲明,或者通過名稱和參數(shù)來聲明,例如foo(integer, text)。 必須給定參數(shù)類型,如果有超過一個同名的函數(shù)。
如果沒有指定函數(shù),一個空的CREATE FUNCTION模板那是用來編輯的。
向標(biāo)準(zhǔn)輸出打印參數(shù),用一個空格分隔并且最后跟著一個新行。 這個特性在顯示腳本的輸出時會有用。例如:
=> \echo `date` Tue Oct 26 21:40:57 CEST 1999
如果第一個參數(shù)是一個無引號的-n,那么不會寫出結(jié)尾的新行。
Tip: 如果使用\o命令重定向查詢的輸出, 你可能會用\qecho取代這條命令。
設(shè)置客戶端字符編碼方式。不帶參數(shù)時,這條命令顯示當(dāng)前的編碼方式。
為不對齊的查詢輸出設(shè)置域分隔符。 缺省時是豎條(|)。 參閱\pset獲取設(shè)置輸出選項的通用方法。
把當(dāng)前的查詢輸入緩沖區(qū)的內(nèi)容發(fā)送給服務(wù)器并且把查詢的輸出存儲到可選的filename或 者把輸出重定向到一個獨立的執(zhí)行command的Unix shell。 單獨一個\g實際上等效于一個分號。 一個帶有參數(shù)的\g是"一次 性"的\o命令的代用品。
給出指定SQL命令的語法幫助。 如果沒有給出command, 那么psql將列出可獲得語法幫助的所有命令。 如果command是一個星號(*) , 則顯示所有SQL命令的語法幫助。
Note: 為簡化擊鍵,包含多個單字的命令不需要引起。因此鍵入\help alter table是正確的。
打開HTML查詢輸出格式。如果HTML格式已經(jīng)打開, 則切換回缺省的對齊的文本格式。 這個命令是為了兼容和方便,參閱\pset獲取設(shè)置其它輸出選項的內(nèi)容。
從文件filename中讀取并把其內(nèi)容當(dāng)作從鍵盤輸入的那樣執(zhí)行查詢。
Note: 如果你想在屏幕上看到讀入的行,就必須對所有行將變量ECHO 設(shè)置為all。
列出服務(wù)器中所有數(shù)據(jù)庫的名稱、所有者、字符集編碼以及訪問權(quán)限。 如果添加+到命令名稱、數(shù)據(jù)庫大小、默認(rèn)表空間,并且也會顯示描述。 (大小信息僅對當(dāng)前用戶可連接的數(shù)據(jù)庫是有效的。)
從數(shù)據(jù)庫里讀取OID為loid的大對象并把它寫到filename里。
注意這個功能與服務(wù)器函數(shù)lo_export
有些微小的區(qū)別,
后者運行時帶著運行數(shù)據(jù)庫服務(wù)器的用戶權(quán)限,而且是在服務(wù)器的文件系統(tǒng)上。
Tip: 使用\lo_list 查看大對象的 OID。
把文件存儲為一個PostgreSQL大對象。可以帶著一個該對象的注解選項。例如:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me' lo_import 152801
表明大型對象收到對象ID152801的響應(yīng),可以用來訪問將來新創(chuàng)建的大對象。 為了可讀性,建議總是把一個人類可讀的評論與每一個對象聯(lián)系。OIDs和注釋 可以通過\lo_list來查看。
注意這條命令與服務(wù)器端的lo_import
有一些區(qū)別,因為這條命令
是本地用戶在本地文件系統(tǒng)上操作,
而不是以服務(wù)器用戶在服務(wù)器文件系統(tǒng)上操作。
顯示一個目前存儲在該數(shù)據(jù)庫里的所有PostgreSQL大對象和 它們的所有者的列表。
從數(shù)據(jù)庫里刪除OID為loid 的大對象。
Tip: 使用\lo_list查找大對象的OID。
把后面的查詢結(jié)果保存到文件filename里或者把后面的查詢結(jié)果重定向到一個獨立執(zhí)行command的Unix shell。如果沒有聲明參數(shù),查詢輸出 將被重置為標(biāo)準(zhǔn)輸出。
"查詢結(jié)果"包括所有表,命令響應(yīng)和從數(shù)據(jù)庫服務(wù)器來的提示, 同樣還有各種各樣查詢數(shù)據(jù)庫的反斜杠命令的輸出(如\d),但是沒有錯誤信息。
Tip: 要用文本分散查詢結(jié)果之間的輸出,用\qecho。
打印當(dāng)前查詢緩沖區(qū)到標(biāo)準(zhǔn)輸出。
更改指定用戶的口令,缺省為當(dāng)前用戶。該命令將提示口令輸入, 然后將加密過的口令使用ALTER ROLE之類的命令發(fā)送給服務(wù)器。 這可以保證新口令不會以明文形式出現(xiàn)在命令歷史、服務(wù)器日志、或其他什么地方。
提示用戶設(shè)置變量name。一個可選提示, text,是可以指定的。(對于多字提示, 用單引號。)
缺省時,\prompt使用終端輸入和輸出。然而,如果-f命令行 開關(guān)被使用,\prompt使用標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出。
這個命令的輸出設(shè)置選項影響查詢結(jié)果表。option 表明那個選項應(yīng)該被設(shè)置。value的語義根據(jù)選定的 選項發(fā)生變化。對于一些選項,省略value會導(dǎo)致 選項toggled或者復(fù)原,正如特定選項中描述的一樣。如果沒有提及此類表現(xiàn),那么省略 value僅會使得當(dāng)前設(shè)置顯示出來。
可調(diào)節(jié)的打印選項有:
設(shè)置輸出格式為unaligned, aligned,wrapped, html, latex,或者troff-ms之一。 允許使用唯一縮寫,這也意味著一個字母就夠了。
Unaligned(不對齊)模式把一條記錄的所有字段都輸出到一行, 用當(dāng)前有效的域分隔符分隔。 這主要用于生成那些要被其它程序讀取的輸出(比如,制表符分隔或者逗號分隔)。
Aligned(對齊)模式是標(biāo)準(zhǔn)的,人類可讀的,格式化好了的文本輸出;這是缺省。
wrapped格式就像aligned,但是跨線包裝寬的數(shù)據(jù)值 使得輸出匹配目標(biāo)列寬。目標(biāo)寬會按columns選項描述的來決定。 請注意psql不會試圖包裝列標(biāo)題;因此,wrapped 與aligned表現(xiàn)的相同,如果列標(biāo)題所需的總寬度超過目標(biāo)。
The html, latex,和troff-ms HTML和LaTeX模式把表輸 出為可用于文檔里的對應(yīng)標(biāo)記語言。它們還不是完整 的文檔!可能對于HTML變化還不是太大, 但是在LaTeX里,你必須有一個完整的文檔包裝器。
為wrapped格式設(shè)置目標(biāo)寬度,以及寬讀限制來決定輸出的寬度是否足夠請求 頁面調(diào)動程序。0(缺省值)會導(dǎo)致目標(biāo)寬度被環(huán)境變量COLUMNS控制, 若未設(shè)置COLUMNS或者回事檢測到的屏幕寬度。另外,如果 columns為0,那么wrapped格式僅影響屏幕輸出。如果 columns是非零的那么文件和管輸出也會包裝為那個寬度。
value必須是一個數(shù)字。 通常,數(shù)字越大,表就有越寬的邊界和越多的線,但是這個參數(shù)取決于實際的格式。 在HTML模式里,這個參數(shù)會直接翻譯成border=...屬性, 在其它的模式里,只有值0(無邊界)、1(內(nèi)部分隔線)、2(表框架)有意義。
設(shè)置邊界線條格式為ascii, old-ascii 或者unicode中的一種。允許唯一縮略詞。 (那意味著一個字母就足夠了。)缺省設(shè)置為ascii。 該選項僅影響aligned和wrapped的輸出格式。
ascii格式使用純ASCII字符。數(shù)據(jù)中的 換行符通過使用右側(cè)空白中的一個+來顯示。當(dāng) wrapped格式從一行中封裝數(shù)據(jù)到下一行而沒有換行符, 一個點(.) 會顯示在首行的右側(cè)空白中,并且會再次出現(xiàn)在接下來一行 的事務(wù)左側(cè)空白處。
old-ascii格式使用純ASCII字符,通過使用 在PostgreSQL8.4以及更早期版本中使用的格式風(fēng)格。 數(shù)據(jù)中的換行符通過使用一個:符號來顯示而不是左邊欄的分隔符。 當(dāng)數(shù)據(jù)從一行被封裝到下一行而沒有一個換行符,一個;符號 是用來代替左邊的列分隔符。
unicode格式使用Unicode盒繪圖字符。在數(shù)據(jù)中的換行符通過使用 左側(cè)空白中的回車符號來顯示。當(dāng)數(shù)據(jù)被從一個行封裝到下一個而沒有一個換行符, 一個省略符會顯示在首行的左側(cè)空白中,并且會再次在以下行的左側(cè)空白中。
當(dāng)border設(shè)置比0大時,該選項也決定用來畫邊界線的字符。 純ASCII字符到處適用,但是Unicode字符在能識別它 們的顯示中看起來更好。
如果value已被指定, 那它必須是on或者off, 這將啟用或者禁用擴展模式。如果value 被略去了常規(guī)和擴展模式之間的切換命令。當(dāng)啟用擴展模式,查詢結(jié)果會在兩列中顯示, 列名稱會在左邊列顯示而數(shù)據(jù)會在右邊一列顯示。若數(shù)據(jù)不匹配常規(guī)"horizontal" 模式下的屏幕,該模式是有效的。
設(shè)置字符串在一個空值的地方打印。默認(rèn)是什么都不打印,這很容易被誤認(rèn)為是一個空 字符串。例如:有人可能會更喜歡\pset null '(null)'。
聲明在非對齊模式時的域分隔符。這樣就可以創(chuàng)建其它程序希望的制表符或逗號 分隔的輸出。要設(shè)置制表符域分隔符, 鍵入\pset fieldsep'\t'。缺省域分隔符是'|'(豎條符)。
如果指定value,那么必須是 on或者off,這將啟用或者關(guān)閉表腳碼 的顯示((n rows)也算)。如果 value省略切換頁腳顯示打開或關(guān)閉 的命令。
如果指定value,那么必須是 on或者off,這將啟用或者關(guān)閉表腳碼 的顯示((n rows)也算)。如果 value省略定期和特定于地區(qū) 的數(shù)字輸出之間的命令切換。
聲明在非對齊模式時的記錄分隔符。缺省是換行符。
如果指定value,那么必須是 on或者off,這將啟用或禁用只有元組的模式。 如果value省略定期和僅元組輸出之間的命令。 常規(guī)的輸出包括額外的信息,如列標(biāo)題、標(biāo)題和各種頁腳。在僅元組模式中,僅顯示實際表數(shù)據(jù)。
為任何隨后打印的表設(shè)置標(biāo)題。這個參數(shù)可以用于給你的輸出一個描述性標(biāo)記。 如果不帶value,重置標(biāo)題。
聲明放在HTML table
標(biāo)簽里的任何屬性
(例如cellpadding或bgcolor)。注意,
你可能不需要在這里聲明border,
因為已經(jīng)在\pset border里用過了。
如果沒有給定value,表屬性會被復(fù)原。
控制查詢和psql幫助輸出的分頁器。 如果設(shè)置了環(huán)境變量PAGER, 那么輸出被定向到指定程序,否則使用系統(tǒng)缺省(比如more)。
當(dāng)pager選項是off,分頁器不會被使用。 當(dāng)pager選項是on,分頁器在適當(dāng)?shù)臅r候使用,如: 當(dāng)輸出是一個終端并且不適合屏幕時。pager選項也可以被設(shè)置為 always,這會使得分頁器用于所有的終端而不管是否是適合屏幕的。 沒有一個value的\pset pager 切換分頁器啟動和關(guān)閉。
可以在例子例子小節(jié)看到這些不同格式輸出的示例。
Tip: 有很多用于\pset的快速命令。參閱\a, \C,\H, \t,\T,\x。
Note: 無參數(shù)運行\pset是錯誤的。以后這樣調(diào)用將顯示當(dāng)前打印選項狀態(tài)。
退出psql程序。
這條命令等效于\echo, 區(qū)別是所有輸出將寫入由\o設(shè)置的輸出通道。
重置(清空)查詢緩沖區(qū)。
將命令行歷史打印出或是存放到filename。 如果省略則輸出到標(biāo)準(zhǔn)輸出。這個選項只有在psql 配置成使用GNU Readline庫后才生效。
設(shè)置內(nèi)部變量name為value或者如果給出了多于一個值, 設(shè)置為所有這些值的連接結(jié)果。如果沒有給出第二個參數(shù), 那么只設(shè)變量不設(shè)值。要重置一個變量,使用\unset命令。
有效的變量名可以包含字符,數(shù)字和下劃線。參閱下面的變量變量 獲取細(xì)節(jié)。
盡管你可以設(shè)置任何變量為任意值,psql對一些變量特殊對待。 它們在關(guān)于變量的小節(jié)里面有文檔。
Note: 這條命令和SQL命令SET是完全不一樣的。
切換輸出的字段名的信息頭和行記數(shù)腳注。 這條命令等效于\pset tuples_only,提供它主要為了方便。
在使用HTML輸出
模式時聲明放在table
標(biāo)記里的屬性。
這條命令等效于\pset tableattr table_options。
沒有參數(shù),切換每個SQL語句需要時間的顯示,以毫秒為單位。通過參數(shù)設(shè)置名稱。
將當(dāng)前查詢緩沖區(qū)輸出到文件filename或者重定向到Unix 命令command。
切換擴展行格式。等效于\pset expanded。
通過相關(guān)訪問權(quán)限列出表、視圖和序列。如果指定 pattern, 則僅列出名稱匹配模式的表、視圖和序列。
這是\dp("顯示權(quán)限")的別名。
返回到一個單獨的Unix shell或者 執(zhí)行Unix命令command。 參數(shù)不會被進(jìn)一步解釋;shell將看到全部參數(shù)。
獲得關(guān)于反斜杠命令的幫助信息。
各種\d命令都接受一個pattern參數(shù), 聲明要顯示的對象名字。最簡單的情況下pattern正好等于對象的名字。 pattern中的字符通常會被自動轉(zhuǎn)換成小寫,就像SQL名字一樣。 例如\dt FOO將顯示名為foo的表。 與在SQL名字中相同的是雙 引號界定的pattern將保持原樣(不做大小寫轉(zhuǎn)換)。 如果需要在雙引號界定的pattern中使用雙引號字符, 你可以寫兩個并列的雙引號,這與 SQL 的引號規(guī)則相同。 例如,\dt "FOO""BAR"將會顯示名為FOO"BAR的表, 但是不會顯示foo"bar。與一般的SQL名字規(guī)則不同的是, 你可以僅用雙引號界定名字的一部分,例如\dt FOO"FOO"BAR將顯示 名為fooFOObar的表。
每當(dāng)pattern完全省略時,\d命令 顯示所有在當(dāng)前模式搜索路徑下可見的對象;這相當(dāng)于使用*作為模式。(一個對象會 認(rèn)為是visible,如果其包含模式在搜索路徑下并且沒有相同的類型和名稱的對象會 在搜索路徑中出現(xiàn)地更早。這等效于聲明這個對象可以通過名稱引用而沒有顯式的模式的條件。) 為了看數(shù)據(jù)庫中的所有對象而不關(guān)閉可見性,使用*.*作為模式。
Pattern中的*表示任何字符序列, 包括沒有字符,而?表示"任何單個字符"。 這個表示法和Unix的shell文件名模式兼容。 比如\dt int*顯示所有名字以int開頭的表。 但是在雙引號內(nèi)部的*和?不具有匹配的功能, 它們只代表自身。
包含點(.)的pattern將被解釋成模式名pattern后面跟一 個對象名 pattern 。例如,\dt foo*.*bar*顯 示所有名字包括foo 的模式中的所有名字以bar開頭的表。如果沒有出現(xiàn)句點, 那么這個模式只匹配在當(dāng)前模式搜索路徑中可見的對象。 同樣,在雙引號內(nèi)的點沒有這個含義,它只代表其自身。
還可以使用正則表達(dá)式語法,比如字符類等等。例如用[0-9]匹配所有數(shù)字。 除.之外的所有正則表達(dá)式中的特殊字符都按照Section 9.7.3里面描述的規(guī)則進(jìn)行解析, 此外,*將被理解成.*,同時?將被理解成.,and $ which is matched literally。這樣一來, 你就可以用?代替.、用(R+|)代替 R*、 用(R|) 代替R?。 $不需要作為一個正則表達(dá)式,因為模式必須匹配整個名稱,與正則表達(dá)式的常規(guī)解釋不通 (換句話說,$會自動加到您的模式中)。在開頭和/或末尾寫*,如果您 不希望該模式被固定。 需要注意的是在雙引號內(nèi)部的所有正則表達(dá)式特殊字符都將失去其特殊含義。 同樣,在對操作符(也就是作為\do參數(shù)的時候)進(jìn)行匹配時正則表達(dá)式特殊字符也將失去其特殊 含義。
psql提供類似通常Unix命令shell那樣的變量替換特性。 變量只是簡單的名稱/值對,這里的值可以是任何長度的任何值。 可以使用psql元命令\set設(shè)置一個變量:
testdb=> \set foo bar
把變量foo的值設(shè)置為bar。要檢索變量的內(nèi)容, 在變量名前面放上冒號然后把它用在任意斜杠命令里:
testdb=> \echo :foo bar
Note: \set的參數(shù)服從和其它命令一樣的替換規(guī)則。因此你可以構(gòu)造有趣的引用, 像\set :foo 'something'這樣,獲得分別像Perl或 PHP那樣 有名的"軟連接"或"變量變量"。不幸(或者萬幸?)的是, 用這些構(gòu)造不能做任何有用的事情。 另一方面,\set bar :foo是一個非常有效的拷貝變量的方法。
如果你不帶第二個參數(shù)調(diào)用\set, 那么只是設(shè)置這個變量而沒有值。 要重置(或刪除)一個變量,使用\unset命令。
psql的內(nèi)部變量可以 包括任意順序和數(shù)量的字母、數(shù)字、下劃線。 有一些常用變量被psql特殊相待。它們是一些選項設(shè)置, 這些選項在運行時可以通過改變變量的值或者改變一些應(yīng)用的表現(xiàn)狀態(tài)而改變。 盡管你可以把這些變量用于其它用途,但是不鼓勵這么做, 因為程序的特性可能會變得非常奇怪。通常, 所有特殊對待的變量都是由大寫字母組成(可能還有數(shù)字和下劃線)。 為了保證和未來的最大限度的兼容性,請避免使用這樣的變量。 下面是一個所有特殊對待的變量列表。
如果是on(缺省),那么每個SQL命令都在成功完成后自動提交。 要推遲這種模式下的提交,你必須輸入一個BEGIN或START TRANSACTION命令。 如果是off或者未設(shè)置,SQL命令不會提交, 直到你明確地發(fā)出COMMIT或END。 關(guān)閉自動提交的模式是通過為你明確發(fā)出一個BEGIN實現(xiàn)的, 它是放在任何尚未在一個事務(wù)塊中并且自己不是 BEGIN或其它事務(wù)控制命令 也不是那些不能在事務(wù)塊里執(zhí)行的命令(比如VACUUM)的前面。
Note: 在關(guān)閉自動提交的模式下,你必須明確放棄任何失敗的事務(wù), 方法是執(zhí)行ABORT或ROLLBACK。還要注意, 如果你不提交就退出會話,所做的工作會丟失。
Note: 打開自動提交是PostgreSQL的傳統(tǒng)行為, 但是關(guān)閉自動提交更接近SQL規(guī)范。 你可以在系統(tǒng)范圍的psqlrc或 ~/.psqlrc文件中關(guān)閉自動提交。
正在連接著的數(shù)據(jù)庫名稱。每次與一個數(shù) 據(jù)庫聯(lián)結(jié)都會設(shè)置這個值(包括程序啟動), 但是可以刪除。
如果設(shè)為all,那么來自鍵盤或腳本的所有輸入行在分 析或執(zhí)行前都回顯到標(biāo)準(zhǔn)輸出。使用-a選項聲明 在程序啟動時就默認(rèn)這樣做。如果設(shè)置為queries, 那么psql只是在查詢發(fā)送給服務(wù)器之前打印出來。 實現(xiàn)這個功能的命令行選項是-e。
當(dāng)設(shè)置了這個變量并且一個反斜杠命令查詢數(shù)據(jù)庫時, 首先顯示查詢。這樣你可以學(xué)習(xí) PostgreSQL 內(nèi)部的 東西并且在你自己的程序里提供類似功能。 要在程序一起動的時候就啟用這個行為, 可以使用-E選項。如果你設(shè)置該 變量的值為noexec, 那么查詢只是顯示出來但是實際上不發(fā)送到服務(wù)器去執(zhí)行。
當(dāng)前的客戶端字符集編碼。
如果該變量的值大于零, SELECT查詢的結(jié)果將按此值分批返回和顯示, 而不是缺省的一次取出和顯示所有結(jié)果。 這樣就可以無論結(jié)果集有多大都只使用很少量的內(nèi)存。 一般來說,設(shè)為100到1000之間的值比較合理。 需要注意的是,使用此特性后,一個查詢可能在顯示了一部分結(jié)果之后遭遇失敗。
Tip: 雖然該特性可以用于所有輸出格式。 但是并不適合在缺省的aligned格式上使用這個特性, 因為每一批結(jié)果會被單獨的分開格式化,這樣一來每一批輸出結(jié)果的列寬就可能各不相等。 不過對于其他格式這個特性工作的很好。
如果將這個變量設(shè)為ignorespace, 那么以空格開始的行將不會進(jìn)入歷史列表。如果設(shè)置為ignoredups, 那么與以前歷史記錄里匹配的行也不會進(jìn)入歷史記錄。 值ignoredups是上面 兩個的結(jié)合。如果刪除此變量或者其值為任何與上面的值不同的東西, 所有交互模式讀入的行都被保存入歷史列表。
Note: 這個特性是從Bash偷學(xué)來的。
此文件將用于存儲歷史列表。缺省值是~/.psql_history。 比如,在 ~/.psqlrc里使用:
\set HISTFILE ~/.psql_history- :DBNAME
將使得psql為每個數(shù)據(jù)庫維護一個獨立的歷史。
Note: 這個特性是從Bash偷學(xué)來的。
保存在命令歷史里的命令的個數(shù)。缺省值是500。
Note: 這個特性是從 Bash 偷學(xué)來的。
當(dāng)前你正連接的數(shù)據(jù)庫服務(wù)器主機。 這是在每次你與數(shù)據(jù)庫連接時(包括程序啟動)設(shè)置的,但是可以刪除。
如果刪除此變量,向一個交互的psql會話發(fā)送 一個EOF(通常是 Control+D)將終止應(yīng)用。 如果設(shè)置為一個數(shù)字值,那么在應(yīng)用終止前該 數(shù)值的EOF字符將被忽略。如果設(shè)置了此變量但是沒有數(shù)字值,缺省是10。
Note: 這個特性是從 Bash 偷學(xué)來的。
最后影響的OID值,即為從一條INSERT 或\lo_import命令返回的值。 此變量只保證在下一條SQL命令的結(jié)果顯示之前有效。
如果是on,那么當(dāng)一個事務(wù)塊里的語句產(chǎn)生錯誤的時候, 這個錯誤將被忽略而事務(wù)將繼續(xù)。如果是interactive, 那么這樣的錯誤只是在交互的會話里忽略,而不是在從讀取腳本文件的時候。 如果是off(缺省),事務(wù)塊里一個語句生 成的錯誤將會回滾整個事務(wù)。 on_error_rollback-on的模式是通過 在一個事務(wù)塊的每個命令前為你隱含地發(fā)出一個SAVEPOINT的方 式工作的,在發(fā)生錯誤的時候回滾到該事務(wù)塊。
缺省時,如果非交互的腳本碰到一個錯誤 (比如一條錯誤的SQL命令或者內(nèi)部元命令), 處理會繼續(xù)進(jìn)行。這是psql的傳統(tǒng)特性,但 是有時候不太希望這樣。如果設(shè)置了這個變量,腳本處理將馬上停止。 如果該腳本是從另外一個腳本調(diào)用的,那個腳本也會按同樣的方式停止。 如果最外層的腳本不是從一次交互的psql會話 中調(diào)用的而是用-f選項調(diào)用的, psql將返回錯誤代碼3,以示這個 情況與致命錯誤條件的區(qū)別(錯誤代碼為1)。
當(dāng)前你正在連接的數(shù)據(jù)庫服務(wù)器的端口。 這是在每次你與數(shù)據(jù)庫連接時(包括程序啟動)設(shè)置的, 但是可以刪除。
這些指明psql顯示的提示符看上去像什么。參閱下面的提示符提示符。
這個變量等效于命令行選項-q??赡茉诮换ツJ较聸]有什么用。
這個變量等效于命令行選項 -S。
這個變量等效于命令行選項 -s。
當(dāng)前你正用于連接的數(shù)據(jù)庫用戶。 這是在每次你與數(shù)據(jù)庫連接時(包括程序啟動)設(shè)置的, 但是可以被刪除。
這個選項可以設(shè)置為值default, verbose,terse之一以控制錯誤報告的冗余行。 of error reports.
psql變量的一個額外的有用的特性是你可以替代 ("interpolate")它們?yōu)槌R?guī)的SQL語句。 psql提供特殊設(shè)施確保值用作SQL文本并且標(biāo)識符是正確轉(zhuǎn)義的。 插入一個沒有任何特殊轉(zhuǎn)義的值的語法會再次來預(yù)先考慮有冒號(:)的變量名:
testdb=> \set foo 'my_table' testdb=> SELECT * FROM :foo;
那么會查詢表my_table。請注意這是不安全的:該變量的值是隨便復(fù)制的, 所以它甚至可以包含不平衡報價或反斜杠命令。您必須確保您設(shè)置的位置是由意義的。
當(dāng)一個值將用作一個SQL文本或標(biāo)識符,安排其轉(zhuǎn)義是最安全的。為了轉(zhuǎn)義一個變量的值為SQL文本, 寫一個冒號后跟單引號引起的變量名稱。為了將值轉(zhuǎn)義數(shù)值為一個SQL標(biāo)示符,寫一個冒號后跟 雙引號引起的變量名。前面的例子以這種方式編寫會更安全:
testdb=> \set foo 'my_table' testdb=> SELECT * FROM :"foo";
變量插入將不會執(zhí)行到引證的SQL字符實體。
該原理的一個可能的應(yīng)用是將一個文件的內(nèi)容復(fù)制到一個表列中。首先加載文件到一個變量 人后按照以上執(zhí)行:
testdb=> \set content `cat my_file.txt` testdb=> INSERT INTO my_table VALUES (:'content');
(請注意這仍將無法工作,若my_file.txt包含NUL字節(jié)。 psql不支持在變量值中內(nèi)嵌NUL字節(jié)。)
盡管冒號可以合法地出現(xiàn)在SQL命令中,插入時的一個明顯意圖(如:name, :'name', or :"name") 是不能更改的除非命名的變量 是當(dāng)前設(shè)置的。在任何情況下,您都可以通過加上一個反斜杠來轉(zhuǎn)義一個冒號來阻止其替換。 (變量的冒號語法是面向嵌入式查詢語言的標(biāo)準(zhǔn)SQL,如ECPG。) 面向數(shù)組切片和類型映射的冒號語法是PostgreSQL擴展, 因此沖突。轉(zhuǎn)義一個變量的值為SQL文本或者標(biāo)示符的冒號語法是一個psql 擴展。)
psql使用的提示符可以根據(jù)你的喜好自定義。 三個變量PROMPT1,PROMPT2, PROMPT3包含描述提示符 的外觀的字符串和特殊逃逸序列。PROMPT1是psql請求一 個新命令時使用的正常提示符。PROMPT2是在一個命令輸入期待 更多輸入時(因為查詢沒有用一個分號結(jié)束或者引號沒有關(guān)閉)顯示的提 示符。PROMPT3在你運行一個SQL COPY 命令和等待你在終端上鍵入記錄時使用。
相應(yīng)的提示符變量的值是按字面打印的, 除非碰到一個百分號(%)。 這時某些其它的文本被替換, 替換為何物取決于下一個字符。已定義的替換是:
數(shù)據(jù)庫服務(wù)器全程主機名(帶著域名),如果連接是通過Unix域套接字 進(jìn)行的就是[local], 或者如果Unix域套接字不是編譯的缺省位置, 就是[local:/dir/name]
數(shù)據(jù)庫服務(wù)器的主機名刪去第一個點后面的部分剩下的東西。 或者如果是通過Unix域套接字連接,就是[local]。
數(shù)據(jù)庫服務(wù)器正在偵聽的端口號。
數(shù)據(jù)庫會話的用戶名。這個值的擴展可能在一個數(shù) 據(jù)庫會話過程中因為SET SESSION AUTHORIZATION命令而改變。
當(dāng)前數(shù)據(jù)庫名稱。
類似%/,但如果數(shù)據(jù)庫是你的缺省數(shù)據(jù)庫輸出是波浪線~。
如果會話用戶是數(shù)據(jù)庫超級用戶, 使用#,否則用>。這個值的擴展可能在一個數(shù)據(jù)庫會 話過程中因為SET SESSION AUTHORIZATION命令而改變。
對于PROMPT1通常是=,但是如果是單行模式則是^, 而如果會話與數(shù)據(jù)庫斷開(如果\connect失敗可能發(fā)生)則是!。 對于PROMPT2該序列被-,*,一個單引號/雙引號/美 元符(取決于psql是否等待更多的輸入:查詢沒有終止、 正在一個/* ... */注 釋里、正在引號或者美元符擴展里)代替。 對于PROMPT3該序列不解釋成任何東西。
事務(wù)狀態(tài):如果不在事務(wù)塊里則是一個空字符串, 如果在事務(wù)塊里則是*, 如果在一個失敗的事務(wù)塊里則是!,或者無 法判斷事務(wù)狀態(tài)時為?(比如沒有連接)。
指定字節(jié)值的字符將被替換到該位置。
psql變量name的值。參閱變量變量小節(jié)獲取細(xì)節(jié)。
command的輸出類似于通常的 "back-tick"替換。
提示可以包含終端控制字符,這些字符可以改變顏色、背景、提示文本 的風(fēng)格、終端窗口的標(biāo)題。為了讓Readline的行編輯特性正確運行, 這些不可打印的控制字符必須設(shè)計成不可見的,方法是用%[ 和%]包 圍它們。在提示符里可能出現(xiàn)這些東西的多個配對。例如:
testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '
的結(jié)果是在VT100兼容的可顯示彩色的終端上的一個寬體(1;)黑 底黃字(33;40)。
鍵入%%可以在提示符里插入百分號。缺省提 示符為'%/%R%# '用于第一二個提 示符,'>> '用于第三個提示符。
Note: 這個特性是從tcsh偷學(xué)來的。
psql為了編輯和檢索命令行的方便 支持Readline和歷史庫。 命令歷史在psql退出的時候自動保存, 在psql啟動的時候加載。還支持Tab補齊,盡管該補齊 邏輯并不是一個SQL分析器必備的。如果因某些 原因你不喜歡tab補齊,可以把下面幾行放在你的家目錄 下的.inputrc文件里關(guān)閉這個特性:
$if psql set disable-completion on $endif
(這不是psql而是 Readline的特性,參考它的文檔獲取更多細(xì)節(jié)。)
如果\pset columns為0,為wrapped格式控制寬度并且若廣泛的 說不出需要分頁器時為決定控制寬度。
如果查詢結(jié)果不能一屏顯示出來,那么將通過該命令管道傳遞這些結(jié)果。 典型值更大或者更小的。默認(rèn)是基于 平臺的。分頁器的使用可以通過使用\pset命令來關(guān)閉。
缺省的連接參數(shù)(請參閱Section 31.13)。
\e命令使用的編輯器。這些變量是按照上面的順序檢查的;設(shè)置最早的最先使用。
\!命令執(zhí)行的命令。
存儲臨時文件的目錄。缺省是 /tmp.
該實用程序,跟大部分PostgreSQL實用程序一樣,也使用libpq 所支持的環(huán)境變量(請參閱Section 31.13)。
除非已通過一個-X或者-c選項通過, psql試圖在開機之前從整個系統(tǒng)的psqlrc文件和用戶的 ~/.psqlrc文件讀和執(zhí)行命令。(在Windows中,用戶的啟動文件被命名為 %APPDATA%\postgresql\psqlrc.conf。)參閱 PREFIX/share/psqlrc.sample獲取關(guān)于設(shè)置全系統(tǒng)文件的信息。 它可以用來按需要建立客戶端或服務(wù)器端(使用 \set和SET 命令)。
系統(tǒng)范圍的psqlrc和用戶自己的~/.psqlrc都可以通過在 后面附著一個劃線和PostgreSQL版本號的方法變得與版本相關(guān), 比如~/.psqlrc-9.0.4。匹配版本相關(guān)的文件比無版本的文件優(yōu)先讀取。
命令行歷史存儲在~/.psql_history文件中,或者在Windows里 是%APPDATA%\postgresql\psql_history文件。
In an earlier life psql allowed the first argument of a single-letter backslash command to start directly after the command, without intervening whitespace. As of PostgreSQL 8.4 this is no longer allowed.
psql僅保證與相同版本的服務(wù)器運行良好。 這并不意味著其他組合將直接失敗,但是可能會出現(xiàn)微妙的和直觀的問題。 反斜杠命令尤其可能失敗,如果服務(wù)器是一個比psql本身更新的版本。 然而,\d系列的反斜杠命令應(yīng)該對退回到7.4版本的服務(wù)器起作用, 雖然未必與比psql本身更新版本的起作用。
psql是以一種"控制臺應(yīng)用"的方式制作的。 因為Windows控制臺窗口和系統(tǒng)其它部分使用不同 的編碼,所以在psql里使用8位字符的時候 必須采取特殊的注意措施。如果psql檢測到一個有 問題的控制臺代碼頁,那么它在啟動的時候會警告你。 要修改控制臺代碼頁,有兩件事是必須做的:
通過輸入cmd.exe /c chcp 1252設(shè)置代碼頁。 1252是適用于德語的代碼頁;請換成合適你的數(shù)值, 比如中文GB2312的代碼頁是936。如果你使用Cygwin, 你可以在/etc/profile里面輸入這條命令。
控制臺字體設(shè)置為Lucida Console,因為光柵字體(點陣字體)不能在ANSI代碼頁下工作。
第一個例子演示了如何把一個查詢分成多個行進(jìn)行輸入。注意提示符的變化:
testdb=> CREATE TABLE my_table ( testdb(> first integer not null default 0, testdb(> second text) testdb-> ; CREATE TABLE
現(xiàn)在再看看表定義:
testdb=> \d my_table Table "my_table" Attribute | Type | Modifier -----------+---------+-------------------- first | integer | not null default 0 second | text |
把提示符變成更有趣的東西:
testdb=> \set PROMPT1 '%n@%m %~%R%# ' peter@localhost testdb=>
假設(shè)你用數(shù)據(jù)填充了表并且想看一眼:
peter@localhost testdb=> SELECT * FROM my_table; first | second -------+-------- 1 | one 2 | two 3 | three 4 | four (4 rows)
你可以用\pset命令以不同的方法顯示表:
peter@localhost testdb=> \pset border 2 Border style is 2. peter@localhost testdb=> SELECT * FROM my_table; +-------+--------+ | first | second | +-------+--------+ | 1 | one | | 2 | two | | 3 | three | | 4 | four | +-------+--------+ (4 rows) peter@localhost testdb=> \pset border 0 Border style is 0. peter@localhost testdb=> SELECT * FROM my_table; first second ----- ------ 1 one 2 two 3 three 4 four (4 rows) peter@localhost testdb=> \pset border 1 Border style is 1. peter@localhost testdb=> \pset format unaligned Output format is unaligned. peter@localhost testdb=> \pset fieldsep "," Field separator is ",". peter@localhost testdb=> \pset tuples_only Showing only tuples. peter@localhost testdb=> SELECT second, first FROM my_table; one,1 two,2 three,3 four,4
還可以用短(縮寫)命令:
peter@localhost testdb=> \a \t \x Output format is aligned. Tuples only is off. Expanded display is on. peter@localhost testdb=> SELECT * FROM my_table; -[ RECORD 1 ]- first | 1 second | one -[ RECORD 2 ]- first | 2 second | two -[ RECORD 3 ]- first | 3 second | three -[ RECORD 4 ]- first | 4 second | four