中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

PSQL工具使用技巧

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

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

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

psql
Name
psql -- PostgreSQL 交互終端
Synopsis

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

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

-a
--echo-all

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

-A
--no-align

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

-c command
--command command

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

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

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

-d dbname
--dbname dbname

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

-e
--echo-queries

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

-E
--echo-hidden

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

-f filename
--file filename

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

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

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

-F separator
--field-separator separator

使用 separator 作為未對齊輸出的域分隔符。等效于 \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)接選項將被忽略。類似于內(nèi)部命令 \list。

-L filename
--log filename

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

-o filename
--output filename

將所有查詢輸出定向到文件 filename。這個選項等效于命令 \o。

-p port
--port port

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

-P assignment
--pset assignment

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

-q
--quiet

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

-R separator
--record-separator separator

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

-s
--single-step

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

-S
--single-line

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

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

-t
--tuples-only

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

-T table_options
--table-attr table_options

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

-u

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

這個選項已經(jīng)廢棄了,因為它在概念上有漏洞。 (提示輸入非缺省用戶名和提示輸入服務(wù)器要求的口令是完全兩碼事。)我們鼓勵你用 -U 和 -W 選項取代。

-U username
--username username

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

-v assignment
--set assignment
--variable assignment

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

-V
--version

打印 psql 版本然后退出。

-W
--password

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

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

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

-x
--expanded

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

-X,
--no-psqlrc

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

-?
--help

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

退出狀態(tài)

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

psql 是一個普通的 PostgreSQL 客戶端應(yīng)用。為了與一個數(shù)據(jù)庫聯(lián)接,你需要知道你的目標(biāo)數(shù)據(jù)庫, 服務(wù)器的主機(jī)名和端口號以及你希望以哪個用戶的身份進(jìn)行聯(lián)接等信息。 我們可以通過命令行參數(shù)告訴 psql 這些信息,分別是 -d, -h,-p,和 -U。 如果有個參數(shù)不屬于任何選項開關(guān), 那么它會被解釋成數(shù)據(jù)庫名(或者是用戶名——如果數(shù)據(jù)庫名稱已經(jīng)給出了。)。 不是所有這些選項都是必須的,有缺省存在。 如果你省略主機(jī)名, psql 將通過 Unix 域套接字與本地主機(jī)的服務(wù)器相聯(lián), 或者在沒有 unix 域套接字的機(jī)器上,通過 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 為對應(yīng)的值的方法節(jié)約幾次敲擊。 (其它的環(huán)境變量的信息,參閱 Section 28.11。) 另外,用一個 ~/.pgpass 文件來避免輸入密碼也是很方便的。 參閱 Section 28.12 獲取更多信息。

如果因為任何原因而無法與數(shù)據(jù)庫相聯(lián)(例如,權(quán)限不夠,服務(wù)器沒有運(yùn)行等), psql 將返回一個錯誤并退出。
輸入 SQL 命令

通常狀況下,psql 提供一個帶有 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=>

用戶可以在這個提示符下鍵入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 (tab),\digits(八進(jìn)制), \0xdigits(十六進(jìn)制)。

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

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

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

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

下列元命令是已定義的:

\a

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

\cd [ directory ]

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

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

\C [ title ]

把正在打印的表的標(biāo)題設(shè)置為一個查詢的結(jié)果或者取消這樣的設(shè)置。 這條命令等效于 \pset title title. (這條命令的名稱源于 "caption",因為以前只是用于在一個 HTML 表里面設(shè)置標(biāo)題。)

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

與一個新的數(shù)據(jù)庫建立一個聯(lián)接,使用/不用一個用戶名。 前面的聯(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)接失敗(用戶名錯,訪問拒絕等),那么將保留前面的聯(lián)接--當(dāng)且僅當(dāng)在 psql 處于交互模式下如此。 如果運(yùn)行的是非交互的腳本,處理會馬上停止,并返回一個錯誤。 選擇這樣的區(qū)別是一方面為用戶使用方便考慮,另一方面為保證腳本不會碰巧操作了錯誤的數(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í)行前端(客戶端)拷貝。這是一個運(yùn)行 SQL COPY 命令的操作, 不同的是 SQL COPY 是服務(wù)器在讀寫指明的文件,而 psql 讀寫文件并作為本地的文件系統(tǒng)和服務(wù)器之間的路由取出或?qū)懭霐?shù)據(jù)。 這意味著文件訪問性和權(quán)限都是本地用戶的,而不是服務(wù)器的,因此不需要 SQL 超級用戶權(quán)限。

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

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

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

\copyright

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

\d [ pattern ]
\d+ [ pattern ]

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

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

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

\da [ pattern ]

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

\db [ pattern ]
\db+ [ pattern ]

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

\dc [ pattern ]

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

\dC

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

\dd [ pattern ]

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

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

可以用 COMMENT SQL 命令生成對對象的描述。

\dD [ pattern ]

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

\df [ pattern ]
\df+ [ pattern ]

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

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

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

\dg [ pattern ]

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

\distvS [ pattern ]

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

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

\dl

這是 \lo_list的別名,顯示一個大對象的列表。

\dn [ pattern ]
\dn+ [ pattern ]

列出所有可用模式(名字空間)。如果聲明了 pattern (一個正則表達(dá)式),那么只列出匹配模式的模式名。不顯示非本地的臨時模式。 如果在命令名上附加了 +,那么每個對象都和與之相關(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)容拷貝到一個臨時文件然后以相同方式編輯。

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

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

****

\echo text [ ... ]

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

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

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

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

\encoding [ encoding ]

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

\f [ string ]

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

\g [ { filename | |command } ]

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

\help (或者 \h) [ command ]

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

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

\H

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

\i filename

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

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

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

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

\lo_export loid filename

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

    提示: 使用 \lo_list 查看大對象的 OID。

\lo_import filename [ comment ]

把文件存儲為一個 PostgreSQL 大對象。可以帶著一個該對象的注解選項。例如:

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

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

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

\lo_list

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

\lo_unlink loid

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

    提示: 使用 \lo_list 查找大對象的 OID。

\o [ {filename | |command} ]

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

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

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

\p

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

\pset parameter [ value ]

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

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

format

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

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

border

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

expanded )(或者 x)

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

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

null

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

fieldsep

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

footer

切換缺省腳注 (x rows)。

recordsep

聲明在非對齊模式時的記錄分隔符。缺省是換行符。

tuples_only (或者 t)

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

title [ text ]

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

tableattr (或者 T)[ text ]

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

pager

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

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

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

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

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

\q

退出psql程序。

\qecho text [ ... ]

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

\r

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

\s [ filename ]

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

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

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

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

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

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

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

\t

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

\T table_options

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

\w {filename | |command}

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

\x

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

\z [ pattern ]

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

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

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

! [ command ]

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

\?

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

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

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

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

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

testdb=> \set foo bar

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

testdb=> \echo :foo
bar

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

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

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

AUTOCOMMIT

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

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

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

DBNAME

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

ECHO

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

ECHO_HIDDEN

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

ENCODING

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

HISTCONTROL

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

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

HISTFILE

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

\set HISTFILE ~/.psql_history- :DBNAME

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

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

HISTSIZE

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

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

HOST

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

IGNOREEOF

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

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

LASTOID

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

ON_ERROR_ROLLBACK

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

ON_ERROR_STOP

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

PORT

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

PROMPT1
PROMPT2
PROMPT3

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

QUIET

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

SINGLELINE

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

SINGLESTEP

這個變量等效于命令行選項 -s。

USER

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

VERBOSITY

這個選項可以設(shè)置為值 default,verbose,或者 terse 以控制錯誤報告的冗余行。

SQL 代換

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

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

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

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

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

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

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

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

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

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

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

%M

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

%m

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

%>

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

%n

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

%/

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

%~

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

%#

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

%R

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

%x

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

%digits

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

%:name:

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

%command

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

%[ ... %]

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

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

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

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

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

命令行編輯

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

$if psql
set disable-completion on
$endif

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

PAGER

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

PGDATABASE

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

PGHOST
PGPORT
PGUSER

缺省連接參數(shù)

PSQL_EDITOR
EDITOR
VISUAL

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

SHELL

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

TMPDIR

存儲臨時文件的目錄。缺省是 /tmp。

文件

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

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

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

注意

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

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

可能不是你想要的東西。

psql 只能與同版本的服務(wù)器平穩(wěn)地工作。 這不意味著其他組合會完全失敗,但是可能有微小的或者不那么微小的問題。 如果服務(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 端口號 數(shù)據(jù)庫名稱 用戶名稱 #連接到指定的數(shù)據(jù)庫
$ \d #顯示所有的表
$ \d 表名 #顯示指定的表的結(jié)構(gòu)
$ \d 索引名 #顯示指定索引的結(jié)構(gòu)
$ \d 后跟通配符或者?等 #?代表匹配一個 代表匹配多個,如\d s*會匹配以s開頭后跟任意個字符的表或者索引并顯示出來,\d s?會匹配以s開頭后跟一個字符的表或者索引并顯示出來
$ \d+ #該命令會比\d命令顯示更詳細(xì)的信息,除了前面介紹的那些,它還會顯示任何與表相關(guān)聯(lián)的注釋,以及表中出現(xiàn)的OID,\d+可以代替之前的任意以\d開頭的命令
$ \dt #只顯示表
$ \di #只顯示所有的索引
$ \ds #只顯示序列
$ \dv #只顯示視圖
$ \df #只顯示函數(shù)
$ \timing on #顯示SQL的執(zhí)行時間
$ \timing off #關(guān)閉顯示SQL的執(zhí)行時間
$ \dn #顯示所有的schema
$ \db #顯示所有的表空間
$ \du 或者 \dg #顯示數(shù)據(jù)庫中的所有角色和用戶
$ \dp 或者 \z 表名 #顯示表的權(quán)限分配情況
$ \encoding utf8 #當(dāng)客戶端的字符編碼和服務(wù)器的不一樣時,可能會顯示亂碼,可以使用\encoding命令來指定客戶端的字符編碼,如使用\encoding utf8來指定客戶端的編碼方式為utf8
\pset命令用于指定輸出的格式,具體如下:
\pset border 0 : 表示輸出內(nèi)容物邊框
\pset border 1 : 表示邊框只在內(nèi)部,默認(rèn)情況下采用的是該條命令
\pset border 2 : 表示內(nèi)外都存在邊框
歷史命令與補(bǔ)全功能
使用上下鍵可以查看歷史命令
兩次tab鍵可以實現(xiàn)命令補(bǔ)全或者給出輸入提示
在psql中事務(wù)是自動提交的,比方說,執(zhí)行完一條create table語句之后,事務(wù)就會被自動的提交,如果不想自動的提交,方法有兩種:
方案一:運(yùn)行begin命令,然后執(zhí)行相應(yīng)的SQL語句,最后在執(zhí)行commit或者rollback語句
方案二:直接使用psql中的命令關(guān)閉自動提交的功能,\set AUTOCOMMIT off ,該命令設(shè)置自動提交關(guān)閉
實際上,MySQL等數(shù)據(jù)庫也是這樣的情況,當(dāng)我們不使用顯示的事務(wù)語句時,每一條SQL語句都被作為一個事務(wù),或者說數(shù)據(jù)庫內(nèi)部將每一個SQL語句封裝為一個事務(wù),在PostgreSQL中仍然是這樣的,平時使用時要注意。
得到psql中真實執(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://www.2m8n56k.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)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

主站蜘蛛池模板: 成人欧美 | 男女免费视频 | 国产精品亚洲视频 | 久久99热精品免费观看欧美 | 97精品国产高清在线看入口 | 日韩在线视频中文字幕 | 91精品自在拍精选久久 | 亚洲国产成人久久一区二区三区 | 国产伦码精品一区二区三区 | 又黄又爽视频好爽视频 | 国产成在线观看免费视频 | 日本aa毛片a级毛片免费观看 | 亚洲天堂影院在线观看 | 亚洲精品久久久久影 | 一级在线观看视频 | 神马午夜在线 | 99久久精品国产自免费 | 91高清国产经典在线观看 | 国自产精品手机在线视频香蕉 | 成人黄色毛片 | 国产在线一区二区三区 | 日本作爱 | 久久黄网| 在线看欧美日韩中文字幕 | 日韩成人三级 | 国产精品天堂avav在线 | 国产成人在线观看免费网站 | 亚洲成人影院在线 | 911精品国产亚洲日本美国韩国 | 日本免费观看的视频在线 | 福利视频在线午夜老司机 | 91高清国产经典在线观看 | 97午夜影院 | 国产亚洲精品久久综合影院 | 一级做a爰片久久毛片看看 一级做a爰片久久毛片鸭王 | a级毛片无码免费真人 | a毛片免费全部播放完整成 a毛片免费全部在线播放毛 | 亚洲夜夜爽 | 毛片基地看看成人免费 | 夜间福利在线观看 | 又刺激又黄的一级毛片 |