PSQL工具使用技巧

psql功能強(qiáng)大,技巧怎么用只能后續(xù)慢慢補(bǔ)充了,看一個(gè)工具先看怎么用help,下面是一些常用的東西,比如如何查看目錄、怎么使用變量、非常實(shí)用
$ psql #連接到數(shù)據(jù)庫服務(wù)器,可以在其中輸入相應(yīng)的SQL語句或者psql的命令,psql的命令都以\開始,

十多年的化隆網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整化隆建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“化隆網(wǎng)站設(shè)計(jì)”,“化隆網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

公司使用的是postgres的數(shù)據(jù)庫,很多命令不是很熟悉,總是需要網(wǎng)上查資料。所以整理下來一個(gè)全面的手冊(cè)記錄下來。

psql
Name
psql -- PostgreSQL 交互終端
Synopsis

psql [option...] [dbname [username]]
描述

psql 是一個(gè)以終端為基礎(chǔ)的 PostgreSQL 前端。它允許你交互地鍵入查詢,把它們發(fā)出給 PostgreSQL, 然后看看查詢的結(jié)果。另外,輸入可以來自一個(gè)文件。還有, 它提供了一些元命令和多種類 shell 地特性來實(shí)現(xiàn)書寫腳本以及對(duì)大量任務(wù)的自動(dòng)化。
選項(xiàng)

-a
--echo-all

在讀取行時(shí)向標(biāo)準(zhǔn)輸出打印所有內(nèi)容。 這個(gè)選項(xiàng)在腳本處理時(shí)比交互模式時(shí)更有用。這個(gè)選項(xiàng)等效于設(shè)置變量 ECHO 為 all。

-A
--no-align

切換為非對(duì)齊輸出模式。(缺省輸出模式是對(duì)齊的。)

-c command
--command command

聲明 psql 將執(zhí)行一條查詢字串, command,然后退出。這一點(diǎn)在 shell 腳本里很有用。

command 必須是一條完全可以被服務(wù)器分析的查詢字串(也就是說,它不包含 psql特有的特性), 或者是一個(gè)反斜杠命令。這樣你就不會(huì)混合 SQL 和 psql 元命令。要想混合使用,你可以把字串定向到 psql里,象這樣: echo "\x \\ select * from foo;" | psql。

如果命令字串包含多個(gè) SQL 命令,那么他們?cè)谝粋€(gè)事務(wù)里處理, 除非在字串里包含了明確的 BEGIN/COMMIT 命令把他們分成多個(gè)事務(wù)。 這個(gè)和從 psql 的標(biāo)準(zhǔn)輸入里給它填充相同字串不同。

-d dbname
--dbname dbname

聲明想要聯(lián)接的數(shù)據(jù)庫名稱。等效于在命令行行上把 dbname 聲明為第一個(gè)非選項(xiàng)參數(shù)。

-e
--echo-queries

把所有發(fā)送給服務(wù)器的查詢同時(shí)也拷貝到標(biāo)準(zhǔn)輸出。 等效于把變量 ECHO 設(shè)置為 queries。

-E
--echo-hidden

回顯由\d和其他反斜杠命令生成的實(shí)際查詢。 你可以使用這個(gè)命令學(xué)習(xí) psql 的內(nèi)部操作。 這等效于在psql里設(shè)置變量ECHO_HIDDEN。

-f filename
--file filename

使用 filename作為命令的語句源而不是交互式讀入查詢。 在處理完文件后,psql 結(jié)束。這個(gè)選項(xiàng)在很多方面等效于內(nèi)部命令 \i。

如果 filename 是 -(連字符),則從標(biāo)準(zhǔn)輸入讀取。

使用這個(gè)選項(xiàng)與用 psql < filename 有微小的區(qū)別。通常,兩者都回按照你預(yù)期那樣運(yùn)行,但是使用 -f打開了一些很好的特性, 比如帶行號(hào)的錯(cuò)誤信息。而且,使用這個(gè)選項(xiàng)還有可能有減小啟動(dòng)負(fù)荷的機(jī)會(huì)。 另一方面,如果你把所有內(nèi)容手工輸入, 使用 shell 輸入定向的方式(理論上)能保證生成和你已經(jīng)得到的完全一樣的輸出(譯注:重復(fù)運(yùn)行命令)。

-F separator
--field-separator separator

使用 separator 作為未對(duì)齊輸出的域分隔符。等效于 \pset fieldsep 或 \f。

-h hostname
--host hostname

聲明正在運(yùn)行服務(wù)器的主機(jī)名。 如果主機(jī)名以斜杠開頭,則它被用做到 Unix 域套接字的路徑。

-H
--html

打開HTML格式輸出。等效于 \pset format html或 \H 命令。

-l
--list

列出所有可用的數(shù)據(jù)庫,然后退出。其他非聯(lián)接選項(xiàng)將被忽略。類似于內(nèi)部命令 \list。

-L filename
--log filename

除了正常的輸出源之外,把所有查詢輸出記錄到文件 filename。

-o filename
--output filename

將所有查詢輸出定向到文件 filename。這個(gè)選項(xiàng)等效于命令 \o。

-p port
--port port

聲明被服務(wù)器偵聽的 TCP 端口或使用的缺省本地 Unix 主控套接字文件句柄。 缺省的是環(huán)境變量PGPORT的值,如果沒有設(shè)置的話是編譯是聲明的端口,通常是 5432。

-P assignment
--pset assignment

允許你在命令行上以 \pset的風(fēng)格設(shè)置打印選項(xiàng)。 要注意的是你在這里用等號(hào)分割名稱和值,而不能用空格。 因此要把輸出格式設(shè)置為 LaTeX,你可以敲入 -P format=latex。

-q
--quiet

聲明 psql 將安靜地執(zhí)行處理任務(wù)。 缺省時(shí)psql將打印歡迎和許多其他輸出信息。 如果使用了此選項(xiàng),這些都不出現(xiàn)。這在和 -c 選項(xiàng)一起使用時(shí)很有效。在 psql 里,你可以通過設(shè)置 QUIET 變量實(shí)現(xiàn)同樣效果。

-R separator
--record-separator separator

使用 separator 做為非對(duì)齊輸出的記錄分隔符。 等效于\pset recordsep命令。

-s
--single-step

進(jìn)入單步模式運(yùn)行。意味著每個(gè)查詢?cè)诎l(fā)往服務(wù)器之前都要提示用戶, 用這個(gè)選項(xiàng)也可以取消執(zhí)行。此選項(xiàng)主要用于調(diào)試腳本。

-S
--single-line

進(jìn)入單行運(yùn)行模式,這時(shí)每個(gè)命令都將由換行符結(jié)束,象分號(hào)那樣。

    注意: 注意這個(gè)模式是給那些堅(jiān)持要這個(gè)特性的人的,我們不鼓勵(lì)你這么用。 實(shí)際上,如果你在一行里混合使用 SQL 和元命令,執(zhí)行的順序?qū)Σ皇炀毜挠脩舳圆豢偸乔逦摹?/code>

-t
--tuples-only

關(guān)閉打印列名稱和結(jié)果行計(jì)數(shù)腳注等信息。等效于 \t 命令。

-T table_options
--table-attr table_options

允許你聲明放在 HTML table 標(biāo)記里的選項(xiàng)。 參閱 \pset 獲取細(xì)節(jié)。

-u

強(qiáng)制 psql 在和數(shù)據(jù)庫聯(lián)接之提示輸入用戶的用戶名和口令。

這個(gè)選項(xiàng)已經(jīng)廢棄了,因?yàn)樗诟拍钌嫌新┒础?(提示輸入非缺省用戶名和提示輸入服務(wù)器要求的口令是完全兩碼事。)我們鼓勵(lì)你用 -U 和 -W 選項(xiàng)取代。

-U username
--username username

以用戶 username 代替缺省用戶與數(shù)據(jù)庫聯(lián)接。(當(dāng)然,你必須有這么做的權(quán)限。)

-v assignment
--set assignment
--variable assignment

進(jìn)行一次變量分配,象內(nèi)部命令 \set 那樣。 注意,如果有變量名和值的話,你必須在命令行上用等號(hào)分隔它們。要重置一個(gè)變量, 去掉等號(hào)。這個(gè)分配是在啟動(dòng)的很早的階段進(jìn)行的,所以為內(nèi)部使用保留的變量可能被再次覆蓋。

-V
--version

打印 psql 版本然后退出。

-W
--password

強(qiáng)制 psql 在與一個(gè)數(shù)據(jù)庫聯(lián)接前提示輸入口令。

如果服務(wù)器要求口令認(rèn)證,psql 自動(dòng)提出一個(gè)口令提示符。不過,目前是否需要輸入口令的判斷并不完全可靠, 因此用這個(gè)選項(xiàng)強(qiáng)制一個(gè)提示符。 如果沒有發(fā)出口令提示符而服務(wù)器要求口令認(rèn)證,那么聯(lián)接企圖將失敗。

這個(gè)選項(xiàng)將在整個(gè)會(huì)話過程中有效,即使你用元命令 \connect 改變了所聯(lián)接的數(shù)據(jù)庫。

-x
--expanded

打開擴(kuò)展表格式模式。等效于命令 \x。

-X,
--no-psqlrc

不讀取啟動(dòng)文件(系統(tǒng)的 psqlrc 或者你的 ~/.psqlrc 都不讀?。?。

-?
--help

顯示關(guān)于psql命令行參數(shù)的幫助然后退出。

退出狀態(tài)

如果正常結(jié)束,那么 psql 向 shell 返回 0, 如果自身發(fā)生致命錯(cuò)誤,則返回 1(內(nèi)存用盡,未找到文件等), 如果和數(shù)據(jù)庫的連接失效而且會(huì)話不再活躍則返回 2, 如果腳本中發(fā)生錯(cuò)誤并且設(shè)置了 ON_ERROR_STOP 則返回 3。
用法
與一個(gè)數(shù)據(jù)庫聯(lián)接

psql 是一個(gè)普通的 PostgreSQL 客戶端應(yīng)用。為了與一個(gè)數(shù)據(jù)庫聯(lián)接,你需要知道你的目標(biāo)數(shù)據(jù)庫, 服務(wù)器的主機(jī)名和端口號(hào)以及你希望以哪個(gè)用戶的身份進(jìn)行聯(lián)接等信息。 我們可以通過命令行參數(shù)告訴 psql 這些信息,分別是 -d, -h,-p,和 -U。 如果有個(gè)參數(shù)不屬于任何選項(xiàng)開關(guān), 那么它會(huì)被解釋成數(shù)據(jù)庫名(或者是用戶名——如果數(shù)據(jù)庫名稱已經(jīng)給出了。)。 不是所有這些選項(xiàng)都是必須的,有缺省存在。 如果你省略主機(jī)名, psql 將通過 Unix 域套接字與本地主機(jī)的服務(wù)器相聯(lián), 或者在沒有 unix 域套接字的機(jī)器上,通過 TCP/IP 與 localhost 連接。 缺省的端口號(hào)是編譯時(shí)確定的。因?yàn)閿?shù)據(jù)庫服務(wù)器使用同樣的缺省值, 所以在大多數(shù)設(shè)置下,你可能不需要聲明端口號(hào)。缺省的用戶名是你的 Unix 用戶名,與數(shù)據(jù)庫同名。 要注意的是你不能用任意用戶名與任何數(shù)據(jù)庫相聯(lián)。你的數(shù)據(jù)庫管理員應(yīng)該告訴你你的訪問權(quán)限。

如果缺省不太正確,那么你可以通過設(shè)置幾個(gè)環(huán)境變量 PGDATABASE, PGHOST,PGPORT 和/或 PGUSER 為對(duì)應(yīng)的值的方法節(jié)約幾次敲擊。 (其它的環(huán)境變量的信息,參閱 Section 28.11。) 另外,用一個(gè) ~/.pgpass 文件來避免輸入密碼也是很方便的。 參閱 Section 28.12 獲取更多信息。

如果因?yàn)槿魏卧蚨鵁o法與數(shù)據(jù)庫相聯(lián)(例如,權(quán)限不夠,服務(wù)器沒有運(yùn)行等), psql 將返回一個(gè)錯(cuò)誤并退出。
輸入 SQL 命令

通常狀況下,psql 提供一個(gè)帶有 psql 正在與之聯(lián)接的接數(shù)據(jù)庫名的,后綴 =>的提示符。例如,

$ psql testdb
Welcome to psql 8.1, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

testdb=>

用戶可以在這個(gè)提示符下鍵入SQL 查詢。 通常,輸入的行將在命令終止分號(hào)出現(xiàn)時(shí)送到服務(wù)器。 一行的終止并不結(jié)束命令!因此命令可以因清晰起見跨越好幾行。如果命令發(fā)送出去而且執(zhí)行沒有錯(cuò)誤, 命令結(jié)果會(huì)顯示在屏幕上。

當(dāng)命令正在進(jìn)行時(shí),psql 同樣還輪詢由 LISTEN 和 NOTIFY. 生成的異步通知信號(hào)。
元命令

你在 psql 里輸入的任何以不帶引號(hào)的反斜杠('\')開頭的東西都是 psql 元命令,這些命令是由 psql 自己處理的。這些命令也是令 psql 更可用于管理或書寫腳本的原因。 元命令更常見的叫法是斜杠或反斜杠命令。

一個(gè) psql 命令的格式是反斜杠后面緊跟一個(gè)命令動(dòng)詞,然后是任意參數(shù)。 參數(shù)與命令動(dòng)詞和其他參數(shù)以任意個(gè)空白字符間隔。

要在參數(shù)里面包含空白,你必須用單引號(hào)把它包圍起來。 要在這樣的參數(shù)里包含單引號(hào),前面加一個(gè)反斜杠。 任何包含在單引號(hào)里的東西會(huì)被進(jìn)一步進(jìn)行類 C 的替換,把 \n (新行),\t (tab),\digits(八進(jìn)制), \0xdigits(十六進(jìn)制)。

如果一個(gè)不帶引號(hào)的參數(shù)以冒號(hào)(:)開頭, 它會(huì)被當(dāng)作一個(gè)psql 變量,并且該變量的值會(huì)最終成為真正的參數(shù)值。 (譯注:類似 ecpg 和 pl/pgsql 的變量用法。)

用“反勾號(hào)” ("backticks" `) 包圍的內(nèi)容被當(dāng)作一個(gè)命令行傳入 shell。 該命令的輸出(刪除了結(jié)尾的新行)被當(dāng)作參數(shù)值。上面描述的逃逸(字符)序列在反勾號(hào)里也生效。

有些命令以一個(gè) SQL 標(biāo)識(shí)的名稱(如,一個(gè)表名)為參數(shù)。 這些參數(shù)遵循 SQL 語法關(guān)于雙引號(hào)的規(guī)則: 不帶雙引號(hào)的標(biāo)識(shí)強(qiáng)制成小寫, 而雙引號(hào)保護(hù)字母不受大小寫轉(zhuǎn)換,并且允許在標(biāo)識(shí)符中使用空白。 在雙引號(hào)中,成對(duì)的雙引號(hào)在結(jié)果名字中分析成一個(gè)雙引號(hào)。比如, FOO"BAR"BAZ 解析成 fooBARbaz,而 "A weird"" name" 變成 A weird" name。

對(duì)參數(shù)的分析在碰到另一個(gè)不帶引號(hào)的反斜杠時(shí)停止。 這里會(huì)認(rèn)為是一個(gè)新的元命令的開始。特殊序列 \(雙反斜杠)標(biāo)識(shí)參數(shù)的結(jié)尾并將繼續(xù)分析后面的 SQL 命令(如果存在的話)。這樣 SQL 和 psql命令可以自由的在一行里面混合。 但是在任何情況下,一條元命令的參數(shù)不能延續(xù)超過行尾。

下列元命令是已定義的:

\a

如果目前的表輸出格式是不對(duì)齊的,切換成對(duì)齊的。 如果是對(duì)齊的,切換成不對(duì)齊。這條命令是為了向后兼容。參閱 \pset 獲取一個(gè)更通用的解決方法。

\cd [ directory ]

把當(dāng)前工作目錄改變到 directory。 沒有參數(shù)是則改變到當(dāng)前用戶的家目錄。

    提示: 要打印出你的當(dāng)前工作目錄,使用 \!pwd。

\C [ title ]

把正在打印的表的標(biāo)題設(shè)置為一個(gè)查詢的結(jié)果或者取消這樣的設(shè)置。 這條命令等效于 \pset title title. (這條命令的名稱源于 "caption",因?yàn)橐郧爸皇怯糜谠谝粋€(gè) HTML 表里面設(shè)置標(biāo)題。)

\connect (或者 \c)[ dbname [ username ] ]

與一個(gè)新的數(shù)據(jù)庫建立一個(gè)聯(lián)接,使用/不用一個(gè)用戶名。 前面的聯(lián)接將關(guān)閉。如果 dbname 是 -,那么就假設(shè)是當(dāng)前數(shù)據(jù)庫名稱。

如果省略 username,則假設(shè)是當(dāng)前用戶名。

作為一條特殊規(guī)則,不帶任何參數(shù)運(yùn)行\(zhòng)connect 將以缺省用戶身份與缺省數(shù)據(jù)庫連接(正如你不帶任何參數(shù)運(yùn)行 psql 一樣。)

如果聯(lián)接失敗(用戶名錯(cuò),訪問拒絕等),那么將保留前面的聯(lián)接--當(dāng)且僅當(dāng)在 psql 處于交互模式下如此。 如果運(yùn)行的是非交互的腳本,處理會(huì)馬上停止,并返回一個(gè)錯(cuò)誤。 選擇這樣的區(qū)別是一方面為用戶使用方便考慮,另一方面為保證腳本不會(huì)碰巧操作了錯(cuò)誤的數(shù)據(jù)庫的安全機(jī)制考慮的。

\copy table [ ( column_list ) ] { from | to } { filename | stdin | stdout | pstdin | pstdout } [ with ] [ oids ] [ delimiter [ as ] 'character' ] [ null [ as ] 'string' ] [ csv [ quote [ as ] 'character' ] [ escape [ as ] 'character' ] [ force quote column_list ] [ force not null column_list ] ]

執(zhí)行前端(客戶端)拷貝。這是一個(gè)運(yùn)行 SQL COPY 命令的操作, 不同的是 SQL COPY 是服務(wù)器在讀寫指明的文件,而 psql 讀寫文件并作為本地的文件系統(tǒng)和服務(wù)器之間的路由取出或?qū)懭霐?shù)據(jù)。 這意味著文件訪問性和權(quán)限都是本地用戶的,而不是服務(wù)器的,因此不需要 SQL 超級(jí)用戶權(quán)限。

這條命令的語法是模擬 SQL COPY 命令的。 要注意的是由此而來,有一些特殊的分析規(guī)則應(yīng)用于 \copy 命令。 尤其是變量替換規(guī)則和反斜杠代換規(guī)則不起作用。

\copy table from stdin | stdout 分別基于命令輸入和輸出讀/寫。所有行都從發(fā)出命令的同一個(gè)源讀取,直到讀到了 \. 或者流達(dá)到 EOF。 輸出發(fā)送到和命令輸出相同的位置。要從 psql 的標(biāo)準(zhǔn)輸入或者輸出讀/寫, 使用 pstdin 或者pstdout。這個(gè)選項(xiàng)用于把和 SQL 腳本嵌在一起的文件填充表很有用。

    提示: 此操作不象 SQL COPY 命令這樣高效, 因?yàn)樗袛?shù)據(jù)必須通過客戶端/服務(wù)器聯(lián)接。對(duì)于大數(shù)據(jù)量的操作,另一種方法更可行。

\copyright

顯示 PostgreSQL 的版權(quán)和版本信息。

\d [ pattern ]
\d+ [ pattern ]

對(duì)于每個(gè)匹配pattern的關(guān)系(表,視圖,索引或者序列), 顯示所有列,它們的類型,表空間(如果不是缺省的)和任何特殊屬性,象NOT NULL或缺省等--只要存在。 如果實(shí)際上這個(gè)關(guān)系是一個(gè)表,任何已定義的索引,主鍵,唯一約束相關(guān)的索引,規(guī)則,約束,和觸發(fā)器也同樣顯示出來, 如果關(guān)系是一個(gè)視圖,還顯示視圖的定義。 ("匹配模式"在下面定義。)

從 \d+ 來的命令也是一樣的,只不過顯示更多信息:任何與表的列關(guān)聯(lián)的注解也都會(huì)顯示, 還有就是表中出現(xiàn)的 OID。

    注意: 如果如果不帶任何pattern調(diào)用 \d, 等效于 \dtvs,將顯示一個(gè)所有表,視圖和序列的列表。 這完全是出于方便的考慮。

\da [ pattern ]

列出所有可用聚集函數(shù),以及它們操作的數(shù)據(jù)類型。如果聲明了 pattern,那么只顯示匹配(正則表達(dá)式)的聚集函數(shù)。

\db [ pattern ]
\db+ [ pattern ]

列出所有可用的表空間。如果聲明了 pattern, 那么只顯示那些匹配模式的表空間。如果在命令名上附加了 +,那么每個(gè)對(duì)象都和與之相關(guān)的權(quán)限一起列出。

\dc [ pattern ]

列出所有字符集之間的可用轉(zhuǎn)換。如果聲明了 pattern, 則只列出那些匹配模式的轉(zhuǎn)換。

\dC

列出所有類型轉(zhuǎn)換。

\dd [ pattern ]

顯示所有匹配 pattern 的描述,如果沒有給出參數(shù),顯示所有可視對(duì)象。 但是不管怎樣,只有那些有描述內(nèi)容的對(duì)象才顯示出來。 ("對(duì)象"包括聚集,函數(shù),操作符,類型, 關(guān)系(表,視圖,索引,序列,大對(duì)象),規(guī)則和觸發(fā)器。)例如:

=> \dd version
                     Object descriptions
   Schema   |  Name   |  Object  |      Description
------------+---------+----------+---------------------------
 pg_catalog | version | function | PostgreSQL version string
(1 row)

可以用 COMMENT SQL 命令生成對(duì)對(duì)象的描述。

\dD [ pattern ]

列出所有可用域。如果聲明了 pattern,那么只顯示匹配的域。

\df [ pattern ]
\df+ [ pattern ]

列出所有可用函數(shù),以及它們的參數(shù)和返回的數(shù)據(jù)類型。如果聲明了 pattern,那么只顯示匹配(正則表達(dá)式)的函數(shù)。如果使用了 \df+ 的形式,每個(gè)函數(shù)的附加信息,包括語言和描述也會(huì)顯示出來。

    注意: 要查找接受或者返回特定類型的函數(shù),使用你的分頁器的搜索功能來滾動(dòng) \df 的輸出。

    為了減少混亂,\df 并不顯示數(shù)據(jù)類型的 I/O 函數(shù)。 這樣是通過忽略那些接受或者返回類型 cstring 的函數(shù)實(shí)現(xiàn)的。

\dg [ pattern ]

列出所有數(shù)據(jù)庫組。如果聲明了 pattern, 只顯示那些匹配模式的名字。

\distvS [ pattern ]

這不是實(shí)際的命令名稱:字母 i,s, t,v,S 分別代表索引(index), 序列(sequence),表(table),視圖(view)和系統(tǒng)表(system table)。 你可以以任意順序聲明任意或者所有這些字母獲得這些對(duì)象的一個(gè)列表。 字幕 S 把列表限制于系統(tǒng)對(duì)象;如果沒有 S,則只顯示非系統(tǒng)對(duì)象。 如果在命令名上附加了 +,那么還會(huì)列出和每個(gè)對(duì)象相關(guān)聯(lián)的描述,如果有的話。

如果聲明了 pattern,那么只列出匹配模式的對(duì)象。

\dl

這是 \lo_list的別名,顯示一個(gè)大對(duì)象的列表。

\dn [ pattern ]
\dn+ [ pattern ]

列出所有可用模式(名字空間)。如果聲明了 pattern (一個(gè)正則表達(dá)式),那么只列出匹配模式的模式名。不顯示非本地的臨時(shí)模式。 如果在命令名上附加了 +,那么每個(gè)對(duì)象都和與之相關(guān)的權(quán)限和注釋一起列出(如果有的話)。

\do [ pattern ]

列出所有可用操作符,以及它們的操作數(shù)和返回的數(shù)據(jù)類型。 如果聲明了 pattern,那么只顯示匹配模式的操作符。

\dp [ pattern ]

生成一列可用的表和它們相關(guān)的權(quán)限。 如果聲明了 pattern, 那么只列出名字可以匹配模式的表。

命令 GRANT 和 REVOKE 用于設(shè)置訪問權(quán)限。 參閱 GRANT 獲取更多信息。

\dT [ pattern ]
\dT+ [ pattern ]

列出所有數(shù)據(jù)類型或只顯示那些匹配 pattern的。這條命令的 \dT+ 形式顯示更多信息。

\du [ pattern ]

列出所有已配置用戶或者只列出那些匹配 pattern 的用戶。

\edit (or \e) [ filename ]

如果聲明了 filename, 則編輯此文件并且在編輯器退出后將其內(nèi)容拷貝回查詢緩沖區(qū)。 如果沒有給出參數(shù),則把當(dāng)前查詢緩沖區(qū)內(nèi)容拷貝到一個(gè)臨時(shí)文件然后以相同方式編輯。

然后根據(jù)一般的psql規(guī)則重新分析查詢緩沖區(qū), 這時(shí)整個(gè)緩沖區(qū)當(dāng)作一個(gè)單行。(因此你無法用這個(gè)方法制作“腳本”,用 \i 做腳本。) 這還意味著如果該查詢以分號(hào)結(jié)尾(或者包含分號(hào)),它就會(huì)馬上被執(zhí)行。否則它只是在查詢緩沖區(qū)里等待。

    提示: psql 搜索環(huán)境變量 PSQL_EDITOR,EDITOR 和 VISUAL(以此順序)查找要用到哪個(gè)編輯器。如果上面的都沒有設(shè)置,那么在 Unix 系統(tǒng)上使用 vi,在 Windows 系統(tǒng)上用 notepad.exe。

****

\echo text [ ... ]

向標(biāo)準(zhǔn)輸出打印參數(shù),用一個(gè)空格分隔并且最后跟著一個(gè)新行。 這個(gè)特性在顯示腳本的輸出時(shí)會(huì)有用。例如:

=> \echo date
Tue Oct 26 21:40:57 CEST 1999

果第一個(gè)參數(shù)是一個(gè)無引號(hào)的 -n,那么不會(huì)寫出結(jié)尾的新行。

    提示: 如果你使用 \o 命令重定向你的查詢的輸出,你可能會(huì)用 \qecho取代這條命令。

\encoding [ encoding ]

設(shè)置客戶端字符編碼方式。不帶參數(shù)時(shí),這條命令顯示當(dāng)前的編碼方式。

\f [ string ]

為不對(duì)齊的查詢輸出設(shè)置域分隔符。缺省時(shí)是豎條(|)。 參閱 \pset 獲取設(shè)置輸出選項(xiàng)的通用方法。

\g [ { filename | |command } ]

把當(dāng)前的查詢輸入緩沖區(qū)的內(nèi)容發(fā)送給服務(wù)器并且把查詢的輸出存儲(chǔ)到可選的 filename 或者把輸出定向到一個(gè)獨(dú)立的在執(zhí)行 command 的 Unix shell。 單獨(dú)一個(gè) \g 實(shí)際上等效于一個(gè)分號(hào)。一個(gè)帶有參數(shù)的\g 是"一次性"的 \o命令的代用品。

\help (或者 \h) [ command ]

給出指定 SQL 命令的語法幫助。如果沒有給出 command ,那么 psql 將列出可獲得語法幫助的所有命令。如果 command 是一個(gè)星號(hào)("*"),則顯示所有 SQL 命令的語法幫助。

    注意: 為簡(jiǎn)化敲擊,包含多個(gè)單字的命令不需要引起。因此鍵入 \help alter table 是正確的。

\H

打開 HTML 查詢輸出格式。如果 HTML 格式已經(jīng)打開,則切換回缺省的對(duì)齊的文本格式。 這個(gè)命令是為了兼容和方便,參閱 \pset 獲取設(shè)置其他輸出選項(xiàng)的內(nèi)容。

\i filename

從文件filename中讀取并把其內(nèi)容當(dāng)作從鍵盤輸入的那樣執(zhí)行查詢。

    注意: 如果你想在屏幕上看到讀入的行,你必須對(duì)所有行設(shè)置變量 ECHO 為 all。

\l (或 \list)
\l+ (或 \list+)

列出服務(wù)器上所有數(shù)據(jù)庫的名字和它們的所有者以及字符集編碼。在命令名稱后面加一個(gè) "+" 還可以看到對(duì)數(shù)據(jù)庫的描述。

\lo_export loid filename

從數(shù)據(jù)庫里讀取 OID 為 loid 的大對(duì)象并把她寫到 filename里。 注意這個(gè)功能與服務(wù)器函數(shù) lo_export 有些微小的區(qū)別, lo_export 運(yùn)行時(shí)帶著運(yùn)行數(shù)據(jù)庫服務(wù)器的用戶權(quán)限, 而且是在服務(wù)器的文件系統(tǒng)上。

    提示: 使用 \lo_list 查看大對(duì)象的 OID。

\lo_import filename [ comment ]

把文件存儲(chǔ)為一個(gè) PostgreSQL 大對(duì)象。可以帶著一個(gè)該對(duì)象的注解選項(xiàng)。例如:

foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801

響應(yīng)表明此大對(duì)象得到一個(gè)對(duì)象標(biāo)識(shí) 152801,如果你還想訪問該對(duì)象,就應(yīng)該把這個(gè)對(duì)象標(biāo)識(shí)記住。 因此,我們建議總是給每個(gè)對(duì)象關(guān)聯(lián)一個(gè)人類可讀的注解。 那樣就可以用 \lo_list 命令看到這些注解。

注意這條命令與服務(wù)器端的 lo_import 有一些區(qū)別, 因?yàn)檫@條命令是本地用戶在本地文件系統(tǒng)上操作, 而不是以服務(wù)器用戶在服務(wù)器文件系統(tǒng)上操作。

\lo_list

顯示一個(gè)目前存儲(chǔ)在該數(shù)據(jù)庫里的所有 PostgreSQL 大對(duì)象和它們的所有者的列表。

\lo_unlink loid

從數(shù)據(jù)庫里刪除OID為 loid 的大對(duì)象。

    提示: 使用 \lo_list 查找大對(duì)象的 OID。

\o [ {filename | |command} ]

把后面的查詢結(jié)果保存到文件 filename 里或者把后面的查詢結(jié)果定向到一個(gè)獨(dú)立的 Unix shell 執(zhí)行 command。 如果沒有聲明參數(shù),查詢輸出重置為標(biāo)準(zhǔn)輸出。

"查詢結(jié)果"包括所有表,命令響應(yīng)和從數(shù)據(jù)庫服務(wù)器來的提示, 同樣還有各種各樣查詢數(shù)據(jù)庫的反斜杠命令的輸出(如 \d),但是沒有錯(cuò)誤信息。

    提示: 要用文本分散查詢結(jié)果之間的輸出,用 \qecho。

\p

打印當(dāng)前查詢緩沖區(qū)到標(biāo)準(zhǔn)輸出。

\pset parameter [ value ]

這條命令設(shè)置影響查詢結(jié)果表輸出的選項(xiàng)。parameter 描述要設(shè)置的選項(xiàng)是哪一個(gè)。value 的語意也取決于它。

可調(diào)節(jié)的打印選項(xiàng)有:

format

設(shè)置輸出格式為 unaligned,aligned,html, latex 或 troff-ms 之一。允許使用唯一的縮寫。 (這也意味著一個(gè)字母就夠了。)

"Unaligned" (不對(duì)齊)把一條記錄的所有字段都輸出到一行, 用當(dāng)前有效的域分隔符分隔。這主要用于生成那些要被其他程序讀取的輸出(tab分隔,逗號(hào)分隔)。 "Aligned" (對(duì)齊)模式是標(biāo)準(zhǔn)的,人類可讀的,格式化好了的文本輸出,也是缺省。 "HTML" 和 "LaTeX" 模式把表輸出為可用于文檔里的對(duì)應(yīng)標(biāo)記語言。它們還不是完整的文檔! (可能對(duì)于 HTML 變化還不是太大, 但是在 LaTeX 里,你必須有一個(gè)完整的文檔包裝器。)

border

第二個(gè)參數(shù)必須是一個(gè)數(shù)字。通常,數(shù)字越大,表就有越寬的邊界和越多的線, 但是這個(gè)參數(shù)取決于實(shí)際的格式。在HTML模式里, 這個(gè)參數(shù)會(huì)直接翻譯成border=...屬性,在其他的模式里, 只有值 0 (無邊界),1 (內(nèi)部分隔線)和 2 (表框架)有意義。

expanded )(或者 x)

在正常和擴(kuò)展格式之間切換。當(dāng)打開擴(kuò)展格式時(shí),查詢結(jié)果用兩列顯示, 字段名稱在左,數(shù)據(jù)在右。這個(gè)選項(xiàng)只影響正常查詢結(jié)果的顯示方式; psql 元命令的輸出總是使用正常的格式。 這個(gè)模式在數(shù)據(jù)無法放進(jìn)通常的"水平"模式的屏幕時(shí)很有用。

所有四種輸出模式都支持?jǐn)U展格式。

null

第二個(gè)參數(shù)是一個(gè)字串,用以代表字段的值為 null 時(shí)的打印輸出。 缺省是什么都不打,這樣很容易和類似一個(gè)空字串混淆。 因此,我們可能選擇 \pset null '(null)'。

fieldsep

聲明在非對(duì)齊模式時(shí)的域分隔符。 這樣我們就可以創(chuàng)建其他程序希望的tab或逗號(hào)分隔的輸出。要設(shè)置 tab 域分隔符, 鍵入 \pset fieldsep '\t'。缺省域分隔符是 '|' (一個(gè)豎條符號(hào))。

footer

切換缺省腳注 (x rows)。

recordsep

聲明在非對(duì)齊模式時(shí)的記錄分隔符。缺省是換行符。

tuples_only (或者 t)

在完全顯示和只顯示記錄之間切換。 完全顯示將顯示象列頭,標(biāo)題和各種腳注等信息。 在這個(gè)模式下,只顯示記錄模式將只顯示實(shí)際的表數(shù)據(jù)。

title [ text ]

為任何隨后打印的表設(shè)置標(biāo)題。 這個(gè)參數(shù)可以用于給你的輸出一個(gè)描述性標(biāo)記。 如果不帶參數(shù),重置標(biāo)題。

tableattr (或者 T)[ text ]

允許你聲明放在 HTML table 標(biāo)記里的任何屬性。例如,可以是 cellpadding 或 bgcolor。注意你可能不需要在這里聲明 border ,因?yàn)橐呀?jīng)在 \pset border 里用過了。

pager

控制查詢和psql幫助輸出的分頁器。如果設(shè)置了環(huán)境變量 PAGER, 輸出被定向到指定程序,否則使用系統(tǒng)缺省(比如 more)。

如果關(guān)閉了分頁器,則不使用它,如果打開了,程序只在需要的時(shí)候使用分頁器,也就是說, 輸出是到終端,而且那個(gè)表很可能無法與屏幕匹配。 (psql 在決定何時(shí)分頁時(shí)不是很完美。) \pset pager 開關(guān)分頁器。我們也可以把分頁器設(shè)置為 always,導(dǎo)致我們?cè)谌魏吻闆r下都使用分頁器。

可以在 例子 節(jié)看到這些不同格式輸出的示例。

提示: 有很多用于\pset的快速命令。參閱 \a,\C,\H, \t,\T,和 \x。

注意: 無參數(shù)運(yùn)行 \pset是錯(cuò)誤的。 以后這樣調(diào)用將顯示當(dāng)前打印選項(xiàng)狀態(tài)。

\q

退出psql程序。

\qecho text [ ... ]

這條命令等效于 \echo ,區(qū)別是所有輸出將寫入由 \o設(shè)置的輸出通道。

\r

重置(清空)查詢緩沖區(qū)。

\s [ filename ]

將命令行歷史打印出或是存放到 filename。 如果省略 filename, 歷史將輸出到標(biāo)準(zhǔn)輸出。這個(gè)選項(xiàng)只有在 psql 配置成使用 GNU Readline 庫后才生效。

    注意: 在當(dāng)前版本里,這個(gè)( GNU 歷史庫)不再是必須的了, 實(shí)際上,在程序結(jié)束時(shí)自動(dòng)保存命令行歷史。每次 psql 啟動(dòng)都會(huì)裝載命令行歷史。

\set [ name [ value [ ... ] ] ]

設(shè)置內(nèi)部變量 name 為 value 或著如果給出了多于一個(gè)值, 設(shè)置為所有這些值的聯(lián)接結(jié)果。如果沒有給出第二個(gè)參數(shù),只設(shè)變量不設(shè)值。要重置一個(gè)變量,使用 \unset 命令。

有效的變量名可以包含字符,數(shù)字和下劃線。 參閱下面的 變量 獲取細(xì)節(jié)。

盡管你可以設(shè)置任何變量為任意值, psql對(duì)一些變量特殊對(duì)待。它們?cè)陉P(guān)于變量的節(jié)里面有文檔。

    注意: 這條命令是完全和 SQL 命令 SET 不一樣的。

\t

切換輸出的列/字段名的信息頭和行記數(shù)腳注。 這條命令等效于 \pset tuples_only,提供主要為了方便。

\T table_options

允許你在使用HTML輸出模式時(shí)聲明放在 table 標(biāo)記里的屬性。 這條命令等效于 \pset tableattr table_options。

\w {filename | |command}

將當(dāng)前查詢緩沖區(qū)輸出到文件 filename 或者定向到 Unix 命令 command。

\x

切換擴(kuò)展行格式。等效于 \pset expanded。

\z [ pattern ]

生成一個(gè)帶有訪問權(quán)限列表的數(shù)據(jù)庫中所有表,視圖和序列的列表。 如果給出任何pattern,則被當(dāng)成一個(gè)規(guī)則表達(dá)式, 只顯示匹配的表,視圖和序列。

命令 GRANT 和 REVOKE 用于設(shè)置訪問權(quán)限。 參閱 GRANT 獲取更多信息。

這是 \dp("顯示權(quán)限")的別名。

! [ command ]

返回到一個(gè)獨(dú)立的 Unix shell 或者執(zhí)行 Unix 命令 command。 參數(shù)不會(huì)被進(jìn)一步解釋,shell 將看到全部參數(shù)。

\?

獲得關(guān)于反斜杠命令的幫助信息。

各種 \d 命令都接受一個(gè) pattern 參數(shù),聲明要顯示的對(duì)象名字。* 表示"任何字符序列", 而 ? 表示"任何單個(gè)字符"。(這個(gè)表示法和 Unix 的 shell 文件名模式兼容。) 高級(jí)用戶也可以使用正則表達(dá)式表示法,比如字符表,[0-9] 這樣的東西來匹配"任意數(shù)字"。 要讓任何這些模式匹配字符可以安字面方式解析,那就應(yīng)該用雙引號(hào)包圍它們。

一個(gè)包含(無引號(hào)的)句點(diǎn)的模式會(huì)被解析承一個(gè)模式名的模式后面跟著一個(gè)對(duì)象名的模式。 比如, \dt foo.bar 顯示所有以foo 開頭的模式里的以 bar 開頭的表名字。 如果沒有出現(xiàn)句點(diǎn),那么這個(gè)模式只匹配在當(dāng)前模式搜索路徑中可見的對(duì)象。

如果完全省略 pattern 參數(shù), 那么 \d 命令顯示所有在當(dāng)前模式搜索路徑中可見的對(duì)象。 要查閱在數(shù)據(jù)庫中的所有對(duì)象,使用模式 .。
高級(jí)特性
變量

psql 提供類似通常 Unix 命令 shell 那樣的變量替換特性。 變量只是簡(jiǎn)單的名稱/數(shù)值對(duì), 這里的值可以是任何長度的任何值。要設(shè)置一個(gè)變量,使用 psql 元命令 \set:

testdb=> \set foo bar

把變量"foo" 設(shè)置為值 "bar"。 要檢索變量的內(nèi)容,在變量名前面放上冒號(hào)然后把它用在任意斜杠命令里:

testdb=> \echo :foo
bar

注意: \set 的參數(shù)服從和其他命令一樣的替換規(guī)則。 因此你可以構(gòu)造有趣的引用,象 \set :foo 'something' 這樣, 獲得分別象Perl或 PHP那樣有名的"軟連接(soft links)"或"變量 變量"。 不幸的是(或者 萬幸的?),用這些構(gòu)造不能做任何有用的事情。另一方面, \set bar :foo 是一個(gè)非常有效的拷貝變量的方法。

如果你不帶第二個(gè)參數(shù)調(diào)用\set, 那么只是設(shè)置這個(gè)變量而沒有值。 要重置(或刪除)一個(gè)變量,使用命令 \unset。

psql的內(nèi)部變量可以包括任意順序, 任意數(shù)量的字母,數(shù)字和下劃線。 有一些常用變量被 psql 另眼相待。它們是一些選項(xiàng)設(shè)置, 這些選項(xiàng)在運(yùn)行時(shí)可以通過改變變量的值或者改變一些應(yīng)用的表現(xiàn)狀態(tài)而改變。 盡管你可以把這些變量用于其他用途,但是我們不鼓勵(lì)這么做,因?yàn)槌绦虻奶匦钥赡軙?huì)很快變得非常奇怪。 通常,所有特殊對(duì)待的變量都是由大寫字母組成(可能還有數(shù)字和下劃線)。 為了保證和未來的最大限度的兼容性,請(qǐng)避免使用這樣的變量。 下面是一個(gè)所有特殊對(duì)待的變量列表。

AUTOCOMMIT

如果是 on(缺?。?,那么每個(gè) SQL 命令都在成功完成后自動(dòng)提交。 要推遲這種模式下的提交,你必須輸入一個(gè) BEGIN 或者 START TRANSACTION SQL 命令。 如果是 off 或者未設(shè)置,SQL 命令不會(huì)提交,知道你明確地發(fā)出 COMMIT 或者 END。 關(guān)閉自動(dòng)提交的模式是通過為你明確發(fā)出一個(gè) BEGIN 實(shí)現(xiàn)的, 它是放在任何尚未在一個(gè)事務(wù)塊中并且自己不是 BEGIN 或者其它事務(wù)控制命令也不是那些不能在事務(wù)塊里執(zhí)行的命令 (比如 VACUUM)的前面。

    注意: 在關(guān)閉自動(dòng)提交的模式下,你必須明確放棄任何失敗的事務(wù),方法是執(zhí)行 ABORT 或者 ROLLBACK。 還要注意如果你不提交就退出會(huì)話,你的工作會(huì)丟失。

    注意: 自動(dòng)提交打開方式是 PostgreSQL 傳統(tǒng)的行為, 但是關(guān)閉自動(dòng)提交更接近 SQL 規(guī)范。如果你喜歡關(guān)閉自動(dòng)提交,你應(yīng)該在你的 .psqlrc 文件里設(shè)置它。

DBNAME

你正在聯(lián)接著的數(shù)據(jù)庫名稱。 每次你與一個(gè)數(shù)據(jù)庫聯(lián)結(jié)都會(huì)設(shè)置這個(gè)值(包括程序啟動(dòng)),但是可以刪除。

ECHO

如果置為 all, 輸入的或者來自鍵盤或者一個(gè)腳本的所有行在分析或執(zhí)行前都寫到標(biāo)準(zhǔn)輸出。 要在程序啟動(dòng)時(shí)聲明這些,使用 -a如果設(shè)置為 queries, psql 只是在查詢發(fā)送給服務(wù)器之前打印出來。 實(shí)現(xiàn)這個(gè)功能的命令行選項(xiàng)是 -e。

ECHO_HIDDEN

當(dāng)設(shè)置了這個(gè)變量并且一個(gè)反斜杠命令查詢數(shù)據(jù)庫時(shí),首先顯示查詢。 這樣你可以學(xué)習(xí) PostgreSQL 內(nèi)部的東西并且在你自己的程序里提供類似功能。如果你設(shè)置該變量的值為 "noexec",查詢只是顯示出來但是實(shí)際上不發(fā)送到服務(wù)器和執(zhí)行。

ENCODING

當(dāng)前的客戶端字符集編碼。

HISTCONTROL

如果這個(gè)變量設(shè)置為 ignorespace, 以空格開始的行將不會(huì)進(jìn)入歷史列表。 如果設(shè)置為變量 ignoredups, 與以前歷史記錄里匹配的行也不會(huì)進(jìn)入歷史記錄。值 ignoreboth是上面兩個(gè)的結(jié)合。 如果刪除此變量或者其值為任何與上面的值不同的東西, 所有交互模式讀入的行都被保存入歷史列表。

    注意: 這個(gè)特性是無恥地從 Bash 里剽竊來的。

HISTFILE

此文件將用于存儲(chǔ)歷史列表。缺省值是 ~/.psql_history。 比如,在 ~/.psqlrc 里使用:

\set HISTFILE ~/.psql_history- :DBNAME

將令 psql 為每個(gè)數(shù)據(jù)庫維護(hù)一個(gè)獨(dú)立的歷史。

    注意: 這個(gè)特性是從 Bash 里偷學(xué)來的。

HISTSIZE

存在命令歷史里的命令的個(gè)數(shù)。缺省值是 500。

    Note: 這個(gè)特性是無恥地從 Bash里剽竊來的。

HOST

當(dāng)前你正聯(lián)接的數(shù)據(jù)庫服務(wù)器主機(jī)。 這是在每次你與數(shù)據(jù)庫聯(lián)接時(shí)(包括程序啟動(dòng))設(shè)置的,但是可以刪除。

IGNOREEOF

如果刪除此變量,向一個(gè)交互的 psql會(huì)話發(fā)送一個(gè) EOF (通常是 Control-D)將終止應(yīng)用。如果設(shè)置為一個(gè)數(shù)字值,那么在應(yīng)用終止前該數(shù)值的 EOF 字符將被忽略。 如果設(shè)置了此變量但是沒有數(shù)字值,缺省是 10。

    注意: 這個(gè)特性是無恥地從 Bash 里剽竊來的。

LASTOID

最后影響的oid值,即為從一條 INSERT 或 lo_insert 命令返回的值。 此變量只保證在下一條 SQL 命令的結(jié)果顯示之前有效。

ON_ERROR_ROLLBACK

如果是 on,如果一個(gè)事務(wù)塊里的語句產(chǎn)生一個(gè)錯(cuò)誤, 那么這個(gè)錯(cuò)誤被忽略而事務(wù)講繼續(xù)。如果是 interactive, 那么這樣的錯(cuò)誤只是在交互的會(huì)話里忽略,而不是在從讀取腳本文件的時(shí)候。 如果是 off(缺省),事務(wù)塊里一個(gè)語句生成的錯(cuò)誤將會(huì)回滾整個(gè)事務(wù)。 on_error_rollback-on 的模式是通過在一個(gè)事務(wù)塊的每個(gè)命令前為你隱含地發(fā)出一個(gè) SAVEPONT 的方式工作的,在發(fā)生錯(cuò)誤的時(shí)候回滾到該事務(wù)塊。

ON_ERROR_STOP

缺省時(shí),如果非交互的腳本碰到一個(gè)錯(cuò)誤,象一條錯(cuò)誤的 SQL 命令或者內(nèi)部元命令,處理會(huì)繼續(xù)進(jìn)行。 這是 psql 的傳統(tǒng)特性, 但是有時(shí)候我們不太希望這樣。如果設(shè)置了這個(gè)變量,腳本處理將馬上停止。 如果該腳本是從另外一個(gè)腳本調(diào)用的,那個(gè)腳本也會(huì)按同樣的方式停止。 如果最外層的腳本不是從一次交互的 psql 會(huì)話中調(diào)用的而是用 -f 選項(xiàng)調(diào)用的,psql 將返回錯(cuò)誤代碼 3,以示這個(gè)情況與致命錯(cuò)誤條件的區(qū)別(錯(cuò)誤代碼 1)。

PORT

當(dāng)前你正在聯(lián)接的數(shù)據(jù)庫服務(wù)器的端口。 這是在每次你與數(shù)據(jù)庫聯(lián)接時(shí)(包括程序啟動(dòng))設(shè)置的,但是可以刪除。

PROMPT1
PROMPT2
PROMPT3

這些指明psql 顯示的提示符看上去象什么。 參閱下面的 提示符。

QUIET

這個(gè)變量等效于命令行選項(xiàng) -q。 可能在交互模式下沒有什么用。

SINGLELINE

這個(gè)變量等效于設(shè)置命令行選項(xiàng) -S。你可以在運(yùn)行時(shí)刪除或設(shè)置它。

SINGLESTEP

這個(gè)變量等效于命令行選項(xiàng) -s。

USER

當(dāng)前你正用于聯(lián)接的數(shù)據(jù)庫用戶。 這是在每次你與數(shù)據(jù)庫聯(lián)接時(shí)(包括程序啟動(dòng))設(shè)置的,但是可以刪除/重置。

VERBOSITY

這個(gè)選項(xiàng)可以設(shè)置為值 default,verbose,或者 terse 以控制錯(cuò)誤報(bào)告的冗余行。

SQL 代換

一個(gè)附加的 psql 變量的有用特性是你可以把它們替換("代換")成正規(guī)的 SQL 語句。這樣做的語法同樣還是變量名前面加一個(gè)冒號(hào)(:)。

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;

將會(huì)查詢表my_table。變量的值是逐字拷貝的, 所以它甚至可以包含不對(duì)稱的引號(hào)或反斜杠命令。你必須保證你輸入的東西是有意義的。 變量替換將不會(huì)在引號(hào)引起來的 SQL 語句里面發(fā)生。

利用這個(gè)功能的一個(gè)時(shí)髦的應(yīng)用是通過使用一個(gè)隨后的語句中最后插入的 OID 建立一個(gè)外鍵仿真場(chǎng)景。 另一個(gè)可能用到這個(gè)機(jī)制的地方是把一個(gè)文件的內(nèi)容拷貝到一個(gè)字段里面去。 首先把文件裝載到一個(gè)變量然后象上面那樣處理。

testdb=> \set content '\'' cat my_file.txt '\''
testdb=> INSERT INTO my_table VALUES (:content);

這樣處理的一個(gè)可能問題是 my_file.txt 可能包含單引號(hào)。這些需要被逃逸以免在處理第三行時(shí)不會(huì)導(dǎo)致語法錯(cuò)誤。 可以使用程序 sed來做這個(gè)處理:

testdb=> \set content '\'' sed -e "s/'/\\\\\\'/g" &lt; my_file.txt '\''

觀察正確數(shù)量的反斜杠(6)!你可以這樣解釋它:在 psql 分析完這行后,它把 sed -e "s/'/\\'/g" < my_file.txt 傳遞給shell。 shell 將對(duì)雙引號(hào)里的東西做其處理然后用參數(shù) -e 和 s/'/\'/g執(zhí)行 sed。當(dāng) sed分析這些時(shí), 它將把雙反斜杠替換為單個(gè)反斜杠然后進(jìn)行替換。 可能有時(shí)候你認(rèn)為所有 Unix 命令使用同一個(gè)逃逸字符是個(gè)好事。 但具有諷刺意味的事實(shí)是你可能不得不逃逸所有反斜杠,因?yàn)?SQL 文本常量同樣也慘遭這種解釋。 這種情況下你可能最好在外部準(zhǔn)備文件。

因?yàn)槊疤?hào)也可以合法的出現(xiàn)在 SQL 命令里,便有下面規(guī)則的應(yīng)用: 如果沒有設(shè)置變量,字符序列 "冒號(hào)+名稱" 不會(huì)被改變。 在任何情況下你都可以用反斜杠逃逸冒號(hào)以保護(hù)它免于被解釋。 (變量的冒號(hào)語法是 SQL 用于嵌入查詢語言的標(biāo)準(zhǔn),如ECPG。用于數(shù)組片段和類型轉(zhuǎn)換的冒號(hào)語法是 PostgreSQL 擴(kuò)展,因此有沖突。)
提示符

psql使用的提示符可以根據(jù)你的喜好客戶化。三個(gè)變量 PROMPT1,PROMPT2,和 PROMPT3 包含描述提示符的外觀的字串和特殊逃逸序列。Prompt 1 是 psql 請(qǐng)求一個(gè)新命令時(shí)的使用的正常提示符。 Prompt 2 是在一個(gè)命令輸入期待更多輸入時(shí)(因?yàn)椴樵儧]有用一個(gè)分號(hào)結(jié)束或者引號(hào)沒有關(guān)閉)顯示的提示符。 Prompt 3 在你運(yùn)行一個(gè) SQL COPY 命令和等待你在終端上鍵入記錄時(shí)使用。

相應(yīng)的提示符變量的值是按字面打印的,除非碰到一個(gè)百分號(hào)(%)。這時(shí)某些其他的文本被替換, 替換為何物取決于下一個(gè)字符。已定義的替換是:

%M

數(shù)據(jù)庫服務(wù)器主機(jī)名全名(帶著域名),如果聯(lián)接是通過 Unix 域套接字進(jìn)行的就是 [local], 或者如果 Unix 域套接字不是編譯的缺省位置,就是 [local:/dir/name]。

%m

數(shù)據(jù)庫服務(wù)器的主機(jī)名刪去第一個(gè)點(diǎn)后面的部分剩下的東西。 或者如果聯(lián)接是通過 Unix 域套接字,就是 [local]。

%>

數(shù)據(jù)庫服務(wù)器正在偵聽的端口號(hào)。

%n

數(shù)據(jù)庫會(huì)話的用戶名。 (這個(gè)值的擴(kuò)展可能在一個(gè)數(shù)據(jù)庫會(huì)話過程中因?yàn)?SET SESSION AUTHORIZATION 命令而改變。)

%/

當(dāng)前數(shù)據(jù)庫名稱。

%~

類似 %/, 但如果數(shù)據(jù)庫是你的缺省數(shù)據(jù)庫輸出是"~" (波浪線(tilde))。

%#

如果會(huì)話用戶是數(shù)據(jù)庫超級(jí)用戶,使用 "#",否則用">"。 (這個(gè)值的擴(kuò)展可能在一個(gè)數(shù)據(jù)庫會(huì)話過程中因?yàn)?SET SESSION AUTHORIZATION 命令而改變。)

%R

對(duì)于 prompt 1 通常是 =,但是如果是單行模式則是 ^,而如果會(huì)話與數(shù)據(jù)庫斷開(如果 \connect 失敗可能發(fā)生)是 !。對(duì)于 prompt 2 該序列被 -,*,一個(gè)單引號(hào),一個(gè)雙引號(hào)或者一個(gè)美元符代替,這取決于 psql是否等待更多的輸入(因?yàn)椴樵儧]有終止,或著正在一個(gè) /* ... */注釋里面,或者因?yàn)槟阍谝?hào)或者美元符擴(kuò)展里面)。對(duì)于 prompt 3 該序列不解釋成任何東西。

%x

事務(wù)狀態(tài):如果不在事務(wù)塊里,是一個(gè)空字串,如果在事務(wù)塊里,是 *, 如果在一個(gè)失敗的事務(wù)塊里是 !,或者無法判斷事務(wù)狀態(tài)時(shí)為 ? (比如,因?yàn)闆]有連接)。

%digits

指定字節(jié)值的字符被替換到該位置。

%:name:

psql變量name的值。參閱 變量 節(jié)獲取細(xì)節(jié)。

%command

command的輸出, 類似于通常的"反勾號(hào)(back-tick)" 替換。

%[ ... %]

提示可以包含終端控制字符,這些字符可以改變顏色,北京,或者提示文本的風(fēng)格, 或者改變終端窗口的標(biāo)題。為了讓 Readline 的行編輯特性正確運(yùn)行, 這些不可打印的控制字符必須設(shè)計(jì)成不可見的,方法是用 %[ 和 %] 包圍它們。 在提示符里可能出現(xiàn)這些東西的多個(gè)配對(duì)。

testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%#%] '

這樣的結(jié)果是在 VT100 兼容的可顯示彩色的終端上的一個(gè)寬體(1;)黑底黃字(33;40)。

要在提示符里插入百分號(hào),鍵入%%。缺省提示符等效于 '%/%R%# ' 用于 prompts 1 和 2,以及'>> ' 用于 prompt 3。

注意: 這個(gè)特性是無恥地從tcsh 里剽竊來的。

命令行編輯

psql 為了編輯和檢索命令行的方便支持 Readline 和歷史庫。 命令歷史在 psql 退出的時(shí)候自動(dòng)保存,在 psql 啟動(dòng)的時(shí)候裝載。 還支持 Tab 補(bǔ)齊,盡管該補(bǔ)齊邏輯并不是一個(gè) SQL 分析器必備的。 如果因某些原因你不喜歡 tab 補(bǔ)齊,你可以把下面幾行放在你的家目錄的一個(gè)叫 .inputrc 的文件里關(guān)閉這個(gè)特性:

$if psql
set disable-completion on
$endif

(這不是psql 的特性, 是 Readline 的。參考它的文檔獲取更多細(xì)節(jié)。)
環(huán)境

PAGER

如果查詢結(jié)果在一頁里放不下,那么它們被定向到這個(gè)命令。 典型的值是 more 或者 less。 缺省的是平臺(tái)相關(guān)的。我們可以用 \pset 命令關(guān)閉分頁器。

PGDATABASE

缺省數(shù)據(jù)庫

PGHOST
PGPORT
PGUSER

缺省連接參數(shù)

PSQL_EDITOR
EDITOR
VISUAL

\e 命令使用的編輯器。這些變量是按照上面的順序檢查的;設(shè)置最早的最先使用。

SHELL

\! 命令執(zhí)行的命令。

TMPDIR

存儲(chǔ)臨時(shí)文件的目錄。缺省是 /tmp。

文件

在啟動(dòng)之前,psql 視圖讀取系統(tǒng)的 psqlrc 文件和執(zhí)行來自用戶家目錄的文件 ~/.psqlrc 里面的命令。 (在 Windows 里,用戶的啟動(dòng)文件名字叫 %APPDATA%\postgresql\psqlrc.conf。) 參閱 PREFIX/share/psqlrc.sample 獲取如何設(shè)置全系統(tǒng)的文件的信息。 可將它用于設(shè)置客戶端或者服務(wù)器的風(fēng)格(使用 \set和SET命令)。

系統(tǒng)的 psqlrc 和用戶自己的 ~/.psqlrc 都可以通過在后面附著一個(gè)劃線和 PostgreSQL 版本號(hào)的方法變得與版本相關(guān), 比如 ~/.psqlrc-8.1。 匹配版本相關(guān)的文件比無版本的文件優(yōu)先讀取。

命令行歷史存儲(chǔ)在 ~/.psql_history,或者在 Windows 里是 %APPDATA%\postgresql\psql_history。

注意

一些 psql的早期版本允許一個(gè)單字母的反斜杠命令(元命令)的第一個(gè)參數(shù)直接跟在命令后面, 而不用空白間隔。出于兼容性原因,這個(gè)特性仍然在某些程度上被支持,但是我不準(zhǔn)備在這里詳細(xì)解釋,因?yàn)槲也还膭?lì)這樣使用。 不過如果你收到莫名其妙的信息,想想這個(gè)用法。例如

testdb=> \foo
Field separator is "oo".

可能不是你想要的東西。

psql 只能與同版本的服務(wù)器平穩(wěn)地工作。 這不意味著其他組合會(huì)完全失敗,但是可能有微小的或者不那么微小的問題。 如果服務(wù)器的版本不同,反斜杠命令是特別容易失效的。

$ \l #列出所有的數(shù)據(jù)庫
$ \d #查看表的結(jié)構(gòu)
$ \d 表名 #查看指定表的具體結(jié)構(gòu)
$ create database 新數(shù)據(jù)庫名 #創(chuàng)建新的數(shù)據(jù)庫
$ \c 已經(jīng)有的數(shù)據(jù)庫名 #切換當(dāng)前數(shù)據(jù)庫到指定的數(shù)據(jù)庫
$ psql -h 主機(jī)名/ip地址 -p 端口號(hào) 數(shù)據(jù)庫名稱 用戶名稱 #連接到指定的數(shù)據(jù)庫
$ \d #顯示所有的表
$ \d 表名 #顯示指定的表的結(jié)構(gòu)
$ \d 索引名 #顯示指定索引的結(jié)構(gòu)
$ \d 后跟通配符或者?等 #?代表匹配一個(gè) 代表匹配多個(gè),如\d s*會(huì)匹配以s開頭后跟任意個(gè)字符的表或者索引并顯示出來,\d s?會(huì)匹配以s開頭后跟一個(gè)字符的表或者索引并顯示出來
$ \d+ #該命令會(huì)比\d命令顯示更詳細(xì)的信息,除了前面介紹的那些,它還會(huì)顯示任何與表相關(guān)聯(lián)的注釋,以及表中出現(xiàn)的OID,\d+可以代替之前的任意以\d開頭的命令
$ \dt #只顯示表
$ \di #只顯示所有的索引
$ \ds #只顯示序列
$ \dv #只顯示視圖
$ \df #只顯示函數(shù)
$ \timing on #顯示SQL的執(zhí)行時(shí)間
$ \timing off #關(guān)閉顯示SQL的執(zhí)行時(shí)間
$ \dn #顯示所有的schema
$ \db #顯示所有的表空間
$ \du 或者 \dg #顯示數(shù)據(jù)庫中的所有角色和用戶
$ \dp 或者 \z 表名 #顯示表的權(quán)限分配情況
$ \encoding utf8 #當(dāng)客戶端的字符編碼和服務(wù)器的不一樣時(shí),可能會(huì)顯示亂碼,可以使用\encoding命令來指定客戶端的字符編碼,如使用\encoding utf8來指定客戶端的編碼方式為utf8
\pset命令用于指定輸出的格式,具體如下:
\pset border 0 : 表示輸出內(nèi)容物邊框
\pset border 1 : 表示邊框只在內(nèi)部,默認(rèn)情況下采用的是該條命令
\pset border 2 : 表示內(nèi)外都存在邊框
歷史命令與補(bǔ)全功能
使用上下鍵可以查看歷史命令
兩次tab鍵可以實(shí)現(xiàn)命令補(bǔ)全或者給出輸入提示
在psql中事務(wù)是自動(dòng)提交的,比方說,執(zhí)行完一條create table語句之后,事務(wù)就會(huì)被自動(dòng)的提交,如果不想自動(dòng)的提交,方法有兩種:
方案一:運(yùn)行begin命令,然后執(zhí)行相應(yīng)的SQL語句,最后在執(zhí)行commit或者rollback語句
方案二:直接使用psql中的命令關(guān)閉自動(dòng)提交的功能,\set AUTOCOMMIT off ,該命令設(shè)置自動(dòng)提交關(guān)閉
實(shí)際上,MySQL等數(shù)據(jù)庫也是這樣的情況,當(dāng)我們不使用顯示的事務(wù)語句時(shí),每一條SQL語句都被作為一個(gè)事務(wù),或者說數(shù)據(jù)庫內(nèi)部將每一個(gè)SQL語句封裝為一個(gè)事務(wù),在PostgreSQL中仍然是這樣的,平時(shí)使用時(shí)要注意。
得到psql中真實(shí)執(zhí)行的SQL語句
aoldbs=# help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
aoldbs=#

eg:查看SQL commands
aoldbs=# \h drop table
Command: DROP TABLE
Description: remove a table
Syntax:
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

aoldbs=#

\?查看PSQL命令

General
\copyright show PostgreSQL usage and distribution terms
\g [FILE] or ; execute query (and send results to file or |pipe)
\gset [PREFIX] execute query and store results in psql variables
\q quit psql
\watch [SEC] execute query every SEC seconds

Help
\? [commands] show help on backslash commands
\? options show help on psql command-line options
\? variables show help on special variables
\h [NAME] help on syntax of SQL commands, * for all commands

Query Buffer
\e [FILE] [LINE] edit the query buffer (or file) with external editor
\ef [FUNCNAME [LINE]] edit function definition with external editor
\p show the contents of the query buffer
\r reset (clear) the query buffer
\w FILE write query buffer to file

Input/Output
\copy ... perform SQL COPY with data stream to the client host
\echo [STRING] write string to standard output
\i FILE execute commands from file
\ir FILE as \i, but relative to location of current script
\o [FILE] send all query results to file or |pipe
\qecho [STRING] write string to query output stream (see \o)

Informational
(options: S = show system objects, + = additional detail)
\d[S+] list tables, views, and sequences
\d[S+] NAME describe table, view, sequence, or index
\da[S] [PATTERN] list aggregates
\db[+] [PATTERN] list tablespaces
\dc[S+] [PATTERN] list conversions
\dC[+] [PATTERN] list casts
\dd[S] [PATTERN] show object descriptions not displayed elsewhere
\ddp [PATTERN] list default privileges
\dD[S+] [PATTERN] list domains
\det[+] [PATTERN] list foreign tables
\des[+] [PATTERN] list foreign servers
\deu[+] [PATTERN] list user mappings
\dew[+] [PATTERN] list foreign-data wrappers
\df[antw][S+] [PATRN] list [only agg/normal/trigger/window] functions
\dF[+] [PATTERN] list text search configurations
\dFd[+] [PATTERN] list text search dictionaries
\dFp[+] [PATTERN] list text search parsers
\dFt[+] [PATTERN] list text search templates
\dg[+] [PATTERN] list roles
\di[S+] [PATTERN] list indexes
\dl list large objects, same as \lo_list
\dL[S+] [PATTERN] list procedural languages
\dm[S+] [PATTERN] list materialized views
\dn[S+] [PATTERN] list schemas
\do[S] [PATTERN] list operators
\dO[S+] [PATTERN] list collations
\dp [PATTERN] list table, view, and sequence access privileges
\drds [PATRN1 [PATRN2]] list per-database role settings
\ds[S+] [PATTERN] list sequences
\dt[S+] [PATTERN] list tables
\dT[S+] [PATTERN] list data types
\du[+] [PATTERN] list roles
\dv[S+] [PATTERN] list views
\dE[S+] [PATTERN] list foreign tables
\dx[+] [PATTERN] list extensions
\dy [PATTERN] list event triggers
\l[+] [PATTERN] list databases
\sf[+] FUNCNAME show a function's definition
\z [PATTERN] same as \dp

Formatting
\a toggle between unaligned and aligned output mode
\C [STRING] set table title, or unset if none
\f [STRING] show or set field separator for unaligned query output
\H toggle HTML output mode (currently off)
\pset [NAME [VALUE]] set table output option
(NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|
numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|
unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})
\t [on|off] show only rows (currently off)
\T [STRING] set HTML <table> tag attributes, or unset if none
\x [on|off|auto] toggle expanded output (currently off)

Connection
\c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}
connect to new database (currently "aoldbs")
\encoding [ENCODING] show or set client encoding
\password [USERNAME] securely change the password for a user
\conninfo display information about current connection

Operating System
\cd [DIR] change the current working directory
\setenv NAME [VALUE] set or unset environment variable
\timing [on|off] toggle timing of commands (currently off)
! [COMMAND] execute command in shell or start interactive shell

Variables
\prompt [TEXT] NAME prompt user to set internal variable
\set [NAME [VALUE]] set internal variable, or list all if no parameters
\unset NAME unset (delete) internal variable

Large Objects
\lo_export LOBOID FILE
\lo_import FILE [COMMENT]
\lo_list
\lo_unlink LOBOID large object operations

標(biāo)題名稱:PSQL工具使用技巧
轉(zhuǎn)載源于:http://muchs.cn/article18/joocdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、Google全網(wǎng)營銷推廣、網(wǎng)站排名、面包屑導(dǎo)航、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)