Provided by:
manpages-zh_1.5-1_all 
NAME
psql - PostgreSQL 交互終端
SYNOPSIS
psql [ option... ] [ dbname [ username ] ]
DESCRIPTIONyz
psql 是一茈H終端為基礎的 PostgreSQL
前端。它允許你交互地鍵入查詢,把它拑o出給 PostgreSQL,
然後看看查詢的結果。另外,輸入可以來自一蚗仵蛂C還有,
它提供了一些元命令和多種類 shell
地特性來實現書寫稿本以及對大量任務的自動化。
OPTIONS項
-a
--echo-all
在讀取行時向螢幕列印所有內容。 這-
蚇龠策b稿本處理時比交互模式時更有用。這蚇龠紫幼藺馧]置變量 ECHO
為 all。
-A
--no-align
切換為非對齊輸出模式。(預設輸出模式是對齊的。)
-c command
--command command
聲明 psql 將執行一條查詢字串, command,然後退出。這一點在
shell 稿本裏很有用。
command
必須是一條完全可以被伺服器分析的查詢字串(也就是說,它不包含
psql特有的特性), 或者是一茪炱袟b命令。這樣你就不會混合 SQL 和
psql 元命令。n想混合使用,你可以把字串定向到 psql 裏,像這樣:
echo "\ select * from foo;" | psql。
如果命令字串包含多 SQL 命令,那麼他怞b一茖堻B理,
除非在字串裏包含了明確的 BEGIN/COMMIT 命令把他怳嬰谷h茖C 這-
茤M從 psql 的標準輸入裏給它填充相同字串不同。
-d dbname
--dbname dbname
聲明想n聯接的數據庫名稱。等效於在命令行行上把 dbname
聲明為第一茷D選項參數。
-e
--echo-queries
顯示所由發送給伺服器的查詢。 等效於把變量 ECHO 設置為 queries。
-E
--echo-hidden
回顯由 \d 和其他反斜槓命令生成的實際查詢。
如果你希望在你自己的程式裏包含類似的功能, 你就可以使用這-
蚇龠窗C這等效於在psql裏設置變量ECHO_HIDDEN。
-f filename
--file filename
使用 filename作為命令的語句源而不是交互式讀入查詢。
在處理完檔案後,psql 結束。這蚇龠策b很多方接幼藺韝熙〝R令 \i。
如果 filename 是 - (連字符),則從標準輸入讀取。
使用這蚇龠絰P用 psql < filename
有微小的區別。通常,兩者都回按照你預期那樣運行,但是使用
-f打開了一些很好的特性, 比如帶行號的錯誤訊息。而且,使用這-
蚇龠聒晹野i能有減小啟動t荷的機會。 另一方-
情A如果你把所有內容手動輸入, 使用 shell
輸入定向的方式(理論上)能保証生成和你已經得到的完全一樣的輸出(譯注:-
契_運行命令)。
-F separator
--field-separator separator
使用 separator 作為域分隔符。等效於 \pset fieldsep 或 \f。
-h hostname
--host hostname
聲明正在運行伺服器的主機名。 如果主機名以斜扛開頭,則它被用做到
Unix 域套接字的路徑。
-H
--html 打開HTML格式輸出。等效於 \pset format html 或 \H 命令。
-l
--list
列出所有可用的數據庫,然後退出。其他非聯接選項將被忽略。類似於內部命令
\list。
-o filename
--output filename
將所有查詢輸出定向到檔案 filename。這蚇龠紫幼藺顝R令 \o。
-p port
--port port
聲明被伺服器偵聽的 TCP 端口或使用的預設本地 Unix
主控套接字檔案句柄。 預設的是環境變量PGPORT的-
A如果沒有設置的話是編譯是聲明的端口,通常是 5432。
-P assignment
--pset assignment
允許你在命令行上以 \pset 的榆瘜]置列印選項。
n注意的是你在這裏用等號分割名稱和A而不能用空格。 因此-
n把輸出格式設置為 LaTeX,你可以敲入 -P format=latex。
-q
--quiet
聲明 psql 將安靜地執行處理任務。
預設時psql將列印歡迎和許多其他輸出信息。
如果使用了此選項,這些都不出現。這在和 -c
選項一起使用時很有效。在 psql 裏,你可以通過設置 QUIET
變量實現同樣效果。
-R separator
--record-separator separator
使用 separator 做為記錄分隔符。 等效於 \pset recordsep 命令。
-s
--single-step
進入單步模式運行。意味著每茯d詢在發往伺服器之前都n提示使用者,
用這蚇龠竣]可以取消執行。此選項主n用於調試稿本。
-S
--single-line
進入單行運行模式,這時每茤R令都將由換行符結束,像分號那樣。
Note: 注意: 注意這蚍狾′O給那些堅持n這荅S性的人的,我-
怳ㄨ社y你這麼用。 實際上,如果你在一行裏混合使用 SQL
和元命令,執行的順序對不熟練的使用者而言不總是清晰的。
-t
--tuples-only
關閉列印列名稱和結果行p數腳注等信息。完全等效於元命令 \t。
-T table_options
--table-attr table_options
允許你聲明放在 HTML table 標記裏的選項。 參閱 \pset 獲取細節。
-u 讓 psql 在和數據庫聯接之提示輸入使用者的使用者名和口令。
這蚇龠竣w經廢棄了,因為它在概念上有漏洞。
(提示輸入非預設使用者名和提示輸入伺服器-
n求的口令是完全兩碼事。)我拊社y你用 -U 和 -W 選項取代。
-U username
--username username
以使用者 username
代替預設使用者與數據庫聯接。(當然,你必須有這麼做的權。)
-v assignment
--set assignment
--variable assignment
進行一次變量分配,像內部命令 \set 那樣。 注意,如果有變量名和-
爾隉A你必須在命令行上用等號分隔它怴Cn姜m一蚥僆q,
去掉等號。這茪幫t是在啟動的很-
的階段進行的,所以為內部使用保留的變量可能被再次覆蓋。
-V
--version
顯示psql版本。
-W
--password
n求 psql 在與一蚍畬w聯接前提示輸入口令。 這蚇龠絞N在整-
虓|話過程中有效,即使你用元命令 \connect 改變了所聯接的數據庫。
在當前版本裏,如果伺服器n求口令認証,psql 自動提出一-
茪f令提示符。因為目前這荅S性是以一荂uhack」為基礎,
自動識別有可能奇怪地失效,因此用這蚇龠絞j制一荋ㄔ亄禳C
如果沒有聲明口令提示符而伺服器n求口令認証,那麼聯接企圖將失敗。
-x
--expanded
打開擴展表格式模式。等效於 \x。
-X,
--no-psqlrc
不讀取啟動檔案 ~/.psqlrc。
-?
--help 顯示關於psql命令行參數的幫助。
EXIT STATUShXA
如果正常結束,那麼 psql 向 shell 返回 0,如果自巡o生P命錯誤,則返回
1(記憶體用盡,未找到檔案等),
如果和數據庫的連接失效而且會話不再活躍則返回
2,如果稿本中發生錯誤並且設置了 ON_ERROR_STOP 則返回 3。
USAGEk
CONNECTING TO A DATABASEP@wp接
psql 是一荋雲q的 PostgreSQL 客戶端應用。為了與一蚍畬w聯接,你需-
n知道你的目標數據庫, 伺服器的主機名和端口號以及你希望以茖洏峈怐漕-
份進行聯接等信息。 我怚i以通過命令行參數告訴 psql 這些信息,分別是 -d,
-h,-p,和 -U。 如果有-
荌捊搣韞籉騜龠絮}關,那麼它會被解釋成數據庫名(或者是使用者名-如果數據庫名稱也給出了。)。
不是所有這些選項都是必須的,預設的也可以。如果你省略主機名, psql
將通過 Unix 域套接字與本地主機的伺服器相聯。
預設的端口號是編譯時確定的。因為數據庫伺服器使用同樣的預設A
所以在大多數設置下,你可能不需n聲明端口號。預設的使用者名是你的 Unix
使用者名,與數據庫同名。
n注意的是你不能用任意使用者名與任何數據庫相聯。你的數據庫管理-
應該告訴你你的訪問權。 你可以通過設置幾蚗藿疻僆q PGDATABASE,
PGHOST,PGPORT 和 PGUSER 為對應的漱隤k節約幾次敲擊。
如果因為任何鴞]而無法與數據庫相聯(例如,權不夠,伺服器沒有運行等),
psql 將返回一蚇欞~並退出。
ENTERING SQL COMMANDSJ SQLRO
通常狀況下,psql 提供一荓a有 psql 正在與之聯接的接數據庫名的,延伸檔名
=>的提示符。例如,
$ psql testdb
Welcome to psql 7.4beta5, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
testdb=>
使用者可以在這荋ㄔ亄聾U鍵入SQL 查詢。
通常,輸入的行將在命令終止分號出現時送到伺服器。
一行的終止並不結束命令!因此命令可以因清晰起見跨越好幾行。如果命令發送出去而且沒有錯誤,
命令結果會顯示在螢幕上。
當命令正在進行時,psql 同樣還輪詢由 LISTEN [listen(7)] 和 NOTIFY
[notify(7)] 生成的異步通知信號。
META-COMMANDSRO
你在 psql 裏輸入的任何以不帶引號的反斜槓('\')開頭的東西都是 psql
元命令,這些命令是由 psql 自己處理的。這些命令也是令 psql
可用於管理或書寫稿本的鴞]。 元命令更常見的叫法是斜槓或反斜槓命令。
一 psql 命令的格式是反斜槓後捱繨礞@茤R令動詞,然後是任意參數。
參數與命令動詞和其他參數以任意茠聽捰r符間隔。
n在參數裏悼]含空白,你必須用單引號把它包圍起來。
n在這樣的參數裏包含單引號,前悼[一茪炱袟b。
任何包含在單引號裏的東西會被進一步進行類 C 的替換,把 \n (new line), \t
(tab), \digits, \0digits, 和 \0xdigits
(給出的十進制,八進制,或十六進制碼的字符)替換掉。
如果一茪ㄠa引號的參數以冒號(:)開頭, 它會被當作一舁sql
變量,並且該變量的|最終成為真正的參數C (譯注:類似 ecpg 和
pl/pgsql 的變量用法。)
用反引號 ("backticks" `) 包圍的內容被當作一茤R令行傳入 shell。
該命令的輸出(刪除了結尾的新行)被當作參數C上探y-
z的逃逸(字符)序列在反引號裏也生效。
有些命令以一 SQL 標識的名稱(如,一茠磽W)為參數。 這些參數遵循 SQL
語法關於雙引號的規則: 不帶雙引號的標識強制成小寫,
而雙引號保護字母不受大小寫轉換,並且允許在標識符中使用空白。
在雙引號中,成對的雙引號在結果名字中分析成一蚋糷瑏飽C比如, FOO"BAR"BAZ
解析成 fooBARbaz,而 "A weird"" name" 變成 A weird" name。 name.
對參數的分析在碰到另一茪ㄠa引號的反斜槓時停止。 這裏會認為是一-
虓s的元命令的開始。特殊序列 \\
(雙反斜槓)標識參數的結尾並將繼續分析後悸 SQL
命令(如果存在的話)。這樣 SQL 和 psql命令可以自由的在一行裏捲V合。
但是在任何情況下,一條元命令的參數不能延續超過行尾。
下列元命令是已定義的:
\a 如果目前的表輸出格式是不對齊的,切換成對齊的。
如果是對齊的,切換成不對齊。這條命令是為了向後相容。參閱 \pset
獲取一茬q用的解決方法。
\cd [directory]
把當前工作目錄改變到 directory。
沒有參數是則改變到當前使用者的家目錄。
Tip: 提示: n列印出你的當前工作目錄,使用 \!pwd.
\C [ title ]
把正在列印的表的標題設置為一茯d詢的結果或者取消這樣的設置。
這條命令等效於 \pset title title. (這條命令的名稱源於
"caption",因為以前只是用於在一 HTML 表裏掖]置標題。)
\connect (or \c) [ dbname [ username ] ]
與一虓s的數據庫建立一蚆p接,使用/不用一茖洏峈怞W。 前-
悸瑭p接將關閉。如果 dbname 是 -,那麼就假設是當前數據庫名稱。
如果省略 username,則假設是當前使用者名。
作為一條特殊規則,不帶任何參數運行 \connect 將以預設使用者-
份與預設數據庫連接(正如你不帶任何參數運行 psql 一樣。)
如果聯接失敗(使用者名錯,訪問拒絕等),那麼將保留前-
悸瑭p接--當且僅當在 psql 處於交互模式下如此。
如果運行的是非交互的稿本,處理會馬上停止,並返回一蚇欞~。
選擇這樣的區別是一方惇馬洏峈怢洏峇隢K考慮,另一方-
惇鬥O証稿本不會碰巧操作了錯誤的數據庫的安全機制考慮的。
\copy table
執行前端(客戶端)拷貝。這是一蚢B行 SQL COPY 命令的操作,
不同的是 SQL COPY 是伺服器在讀寫指明的檔案,而 psql
讀寫檔案並作為本地的檔案系統和伺服器之間的路由取出或寫入數據。
這意味著檔案訪問性和權-
都是本地使用者的,而不是伺服器的,因此不需n SQL 超級使用者權。
這條命令的語法是模擬 SQL COPY 命令的。(參考它的描z獲取細節。)
n注意的是由此而來,有一些特殊的分析規則應用於 \copy 命令。
尤其是變量替換規則和反斜槓代換規則不起作用。
Tip: 提示: 此操作不像 SQL COPY 命令這樣高效,
因為所有數據必須通過客戶端/伺服器聯接。對於大數據量的操作,另一種方法更可行。
Note: 注意: 注意在客戶端和伺服器拷貝時對 stdin 和 stdout
的解釋的區別:在前端拷貝時,這些總是指
psql的輸入和輸出流。在伺服器拷貝時 stdin 來自 COPY 本-
的標準輸入(比如,一荓a有 -f 選項的稿本), 而 stdout
指的是查詢輸出流(參閱下悸 \o 元命令)。
\copyright
顯示 PostgreSQL 的版權和版本信息。
\d [ pattern ]
對於每茪tpattern的關系(表,視圖,索引或者序列),
顯示所有列,它怐疑型,和任何特殊屬性,像NOT NULL或預設等--只-
n存在。 如果實際上這蚚魒t是一-
茠瞴A任何已定義的索引,主鍵,唯一約束相關的索引,規則,約束,和觸發器也同樣顯示出來,
如果關系是一茧纗洁A還顯示視圖的定義。 ("匹配模式"在下惟w義。)
從 \d+ 來的命令也是一樣的,只不過還顯示與表的列關聯的注解。
Note: 注意: 如果如果不帶任何pattern調用 \d , 等效於
\dtvs,將顯示一茤狾釭瞴A視圖和序列的列表。
這完全是出於方便的考慮。
\da [ pattern ]
列出所有可用聚集函數,以及它抩犑@的數據類型。如果聲明了
pattern,那麼只顯示匹配(正則表達式)的聚集函數。
\dc [ pattern ]
列出所有字符集之間的可用轉換。如果聲明了 pattern,
則只列出那些匹配模式的轉換。
\dC 列出所有類型轉換。
\dd [ pattern ]
顯示所有匹配 pattern 的描-
z,如果沒有給出參數,顯示所有可視對象。
但是不管怎樣,只有那些有描z內容的對象才顯示出來。
("對象"包括聚集,函數,操作符,類型,
關系(表,視圖,索引,序列,大對象),規則和觸發器。)例如:
=> \dd version
Object descriptions
Schema | Name | Object | Description
------------+---------+----------+---------------------------
pg_catalog | version | function | PostgreSQL version string
(1 row)
可以用 COMMENT SQL 命令生成對對象的描z。
\dD [ pattern ]
列出所有可用域。如果聲明了 pattern,那麼只顯示匹配的域。
\df [ pattern ]
列出所有可用函數,以及它怐滌捊M返回的數據類型。如果聲明了
pattern,那麼只顯示匹配(正則表達式)的函數。如果使用了 \df+
的形式,每茖蝻漯加信息,包括語言和描z也會顯示出來。
Note: 注意: 為了減少混亂,\df 並不顯示數據類型的 I/O 函數。
這樣是通過忽略那些接受或者返回類型 cstring 的函數實現的。
\distvS [ pattern ]
這不是一蚢篕琱W的命令名稱:字母 i,s,t,v,S
分別代表索引(index),
序列(sequence),表(table),視圖(view)和系統表(system
table)。
你可以以任意順序聲明任意或者所有這些字母獲得這些對象的一茼C表。
字幕 S 把列表制於系統對象;如果沒有 S,則只顯示非系統對象。
如果在命令名上附加了 +,那麼還會列出和每蚢龠H相關聯的描-
z,如果有的話。
如果聲明了 pattern,那麼只列出匹配模式的對象。
\dl 這是 \lo_list 的別名,顯示一茪j對象的列表。
\dn [ pattern ]
列出所有可用模式(名字空間)。如果聲明了 pattern (一-
茈翰h表達式),那麼只列出匹配模式的模式名。
\do [ pattern ]
列出所有可用操作符,以及它怐瑣犑@數和返回的數據類型。
如果聲明了 pattern,那麼只顯示匹配模式的操作符。
\dp [ pattern ]
生成一列可用的表和它怓袺鰝瘍v。 如果聲明了 pattern,
那麼只列出名字可以匹配模式的表。
命令 grant(7) 和 revoke(7) 用於設置訪問權。參閱 grant(7)
獲取更多信息。
\dT [ pattern ]
列出所有數據類型或只顯示那些匹配 pattern的。這條命令的 \dT+
形式顯示更多信息。
\du [ pattern ]
列出所有已配置使用者或者只列出那些匹配 pattern 的使用者。
\edit (or \e) [ filename ]
如果聲明了 filename,
則編輯此檔案並且在編輯器退出後將其內容拷貝回查詢緩沖區。
如果沒有給出參數,則把當前查詢緩沖區內容拷貝到一-
蚆{時檔案然後以相同方式編輯。
然後根據一般的psql規則奐s分析查詢緩沖區, 這時整蚑w沖區當作一-
茬璁獢C(因此你無法用這茪隤k製作「稿本」,用 \i 做稿本。)
這還意味著如果該查詢以分號結尾(或者包含分號),它就會馬上被執行。否則它只是在查詢緩沖區裏等待。
Tip: 提示: psql 搜索環境變量 PSQL_EDITOR,EDITOR 和
VISUAL(以此順序)查找n用到蚑s輯器。如果上悸熙ㄗS有設置,使用
/bin/vi。
\echo text [ ... ]
向標準輸出列印參數,用一茠躓璊戴j並且最後跟著一虓s行。 這-
荅S性在顯示稿本的輸出時會有用。例如:
=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999
果第一荌捊O一茧L引號的 -n,那麼不會寫出結尾的新行。
Tip: 提示: 如果你使用 \o 命令咿w向你的查詢的輸出,你可能會用
\qecho 取代這條命令。
\encoding [ encoding ]
設置客戶端字符編碼方式。不帶參數時,這條命令顯示當前的編碼方式。
\f [ string ]
為不對齊的查詢輸出設置域分隔符。預設時是豎條(|)。 參閱 \pset
獲取設置輸出選項的通用方法。
\g [ { filename | |command } ]
把當前的查詢輸入緩沖區的內容發送給伺服器並且把輸出輸出到可選的
filename 或者把輸出定向到一蚇W立的 Unix shell 執行 command。
單獨一 \g 實際上等效於一茪戲飽C一荓a有參數的 \g 是"一次性"的 \o
命令的代用品。
\help (or \h) [ command ]
給出指定 SQL 命令的語法幫助。如果沒有給出 command ,那麼 psql
將列出可獲得語法幫助的所有命令。如果 command 是一-
茯P號("*"),則顯示所有 SQL 命令的語法幫助。
Note: 注意: 為簡化敲擊,包含多茬璁r的命令不需n引用。因此鍵入
\help alter table 是正確的。
\H 打開 HTML 查詢輸出格式。如果 HTML
格式已經打開,則切換回預設的對齊的文字格式。 這-
茤R令是為了相容和方便,參閱 \pset 獲取設置其他輸出選項的內容。
\i filename
從檔案filename中讀取並把其內容當作從鍵盤輸入的那樣執行查詢。
Note: 注意:
如果你想在螢幕上看到讀入的行,你必須對所有行設置變量 ECHO 為
all。
\l (or \list)
列出伺服器上所有數據庫的名字和它-
怐漫狾釭怚H及字符集編碼。在命令名稱後悼[一 "+"
還可以看到對數據庫的描z。
\lo_export loid filename
從數據庫裏讀取 OID 為 loid 的大對象並把她寫到 filename裏。
注意這茈\能與伺服器函數 lo_export 有些微小的區別, lo_export
運行時帶著運行數據庫伺服器的使用者權,
而且是在伺服器的檔案系統上。
Tip: 提示: 使用 \lo_list 查看大對象的 OID。 OID.
\lo_import filename [ comment ]
把檔案存儲為一 PostgreSQL 大對象。可以帶著一-
虒蚢龠H的注解選項。例如:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801
響應表明此大對象得到一蚢龠H標識
152801,如果你還想訪問該對象,就應該把這蚢龠H標識記住。
因此,我怮媊麥`是給每蚢龠H關聯一茪H類可讀的注解。那樣就可以用
\lo_list 命令看到這些注解。
注意這條命令與伺服器端的 lo_import
有一些區別,因為這條命令是本地使用者在本地檔案系統上操作,
而不是以伺服器使用者在伺服器檔案系統上操作。
\lo_list
顯示一茈堳e存儲在該數據庫裏的所有 PostgreSQL 大對象和它-
怐漫狾釭怐漲C表。
\lo_unlink loid
從數據庫裏刪除OID為 loid 的大對象。
Tip: 提示: 使用 \lo_list 查找大對象的 OID。 OID.
\o [ {filename | |command} ]
把後悸漪d詢結果保存到檔案 filename 裏或者把後-
悸漪d詢結果定向到一蚇W立的 Unix shell 執行 command。
如果沒有聲明參數,查詢輸出姜m為標準輸出。
"查詢結果"包括所有表,命令響應和從數據庫伺服器來的提示,
同樣還有各種各樣查詢數據庫的反斜槓命令的輸出(如
\d),但是沒有錯誤訊息。
Tip: 提示: n用文本分散查詢結果之間的輸出,用 \qecho。
\p 列印當前查詢緩沖區到標準輸出。
\pset parameter [ value ]
這條命令設置影響查詢結果表輸出的選項。parameter 描z-
n設置的選項是一荂Cvalue 的語意也取決於它。
可調節的列印選項有:
format 設置輸出格式為 unaligned,aligned,html, 或
latex之一。允許使用唯一的縮寫。(這也意味著一-
茼r母就夠了。)
"Unaligned" (不對齊)把一條記錄的所有字段都輸出到一行,
用當前有效的域分隔符分隔。這主n用於生成那些-
n被其他程式讀取的輸出(tab分隔,逗號分隔)。 "Aligned"
(對齊)模式是標準的,人類可讀的,格式化好了的文本輸出,也是預設。
"HTML" 和 "LaTeX"
模式把表輸出為可用於文件裏的對應標記語言。它-
攽暀ㄛO完整的文件! (可能對於 HTML
變化還不是太大,但是在 LaTeX 裏,你必須有一-
荍嗾膋漱憟韞]裝器。)
border 第二荌捊眸楓O一-
蚍r。通常,數字越大,表就有越寬的邊界和越多的線,
但是這荌捊決於實際的格式。在HTML模式裏, 這-
荌捊|直接翻譯成border=...屬性,在其他的模式裏, 只有 0
(無邊界),1 (內部分隔線)和 2 (表框架)有意義。
expanded (or x)
在正常和擴展格式之間切換。當打開擴展格式時,所有的輸出都是兩列,
字段名稱在左,數據在右。 這蚍狾’b數據無法放進通常的"水-
"模式的螢幕時很有用。
所有四種輸出模式都支持擴展格式。
null 第二荌捊O一茼r串,用以代表字段的 null
時的列印輸出。 預設是什麼都不打,這樣很容易和類似一-
茠臟r串混淆。 因此,我怚i能選擇 \pset null '(null)'。
fieldsep
聲明在非對齊模式時的域分隔符。 這樣我-
抴N可以創建其他程式希望的tab或逗號分隔的輸出。n設置 tab
域分隔符, 鍵入 \pset fieldsep ''。預設域分隔符是 '|'
(一蚑搊瓛顫飽^。
footer 切換預設足標的顯示 (x rows)。
recordsep
聲明在非對齊模式時的記錄分隔符。預設是換行符。
tuples_only (t)
在完全顯示和只顯示記錄之間切換。
完全顯示將顯示像列頭,標題和各種腳注等信息。
只顯示記錄模式將只顯示實際的表數據。
title [ text ]
為任何隨後列印的表設置標題。 這-
荌捊i以用於給你的輸出一荋yz性標記。 如果不帶參數,-
姜m標題。
tableattr (or T) [ text ]
允許你聲明放在 HTML table 標記裏的任何屬性。例如,可以是
cellpadding 或 bgcolor。注意你可能不需n在這裏聲明 border
,因為已經在 \pset border 裏用過了。
pager 控制查詢和psql幫助輸出的分馮飽C如果設置了環境變量
PAGER, 輸出被定向到指定程式,否則使用系統預設(比如
more)。
如果關閉了分馮飽A則不使用它,如果打開了,程式只在需-
n的時唻洏峇懦器,也就是說, 輸出是到終端,而且那-
茠礅雈i能無法與螢幕匹配。 (psql 在決定何時分-
雅氻ㄛO很完美。) \pset pager 開關分馮飽C我怳]可以把分-
馮像]置為 always,導P我怞b任何情況下都使用分馮飽C
可以在 "Examples 例子" 節看到這些不同格式輸出的示例。
Tip: 提示: 有很多用於 \pset 的快速命令。參閱 \a, \C, \H, \t,
\T, 和 \x。
Note: 注意: 無參數運行 \pset 是錯誤的。
以後這樣調用將顯示當前列印選項狀態。
\q 退出 psql 程式。
\qecho text [ ... ]
這條命令等效於 \echo ,區別是所有輸出將寫入由 \o
設置的輸出通道。
\r 姜m(清空)查詢緩沖區。
\s [ filename ]
將命令行歷史列印出或是存放到 filename。 如果省略 filename,
歷史將輸出到標準輸出。這蚇龠等u有在 psql 配置成使用 GNU
歷史庫後才生效。
Note: 注意: 在當前版本裏,這荂] GNU 歷史庫)不再是必須的了,
實際上,在程式結束時自動保存命令行歷史。每次 psql
啟動都會裝載命令行歷史。
\set [ name [ value [ ... ]]]
設置內部變量 name 為 value 或著如果給出了多於一蚧,
設置為所有這些瑭p接結果。如果沒有給出第二荌捊A只設變量不設-
Cn姜m一蚥僆q,使用 \unset 命令。
有效的變量名可以包含字符,數字和下劃線。 參閱下悸 "Variables
變量" 獲取細節。
儘管你可以設置任何變量為任意A psql對一些變量特殊對待。它-
怞b關於變量的節裏惘酗憟鞳C
Note: 注意: 這條命令是完全和 SQL 命令 SET [set(7)] 不一樣的。
\t 切換輸出的列/字段名的信息頭和行記數腳注。 這條命令等效於 \pset
tuples_only,提供主n為了方便。
\T table_options
允許你在使用HTML輸出模式時聲明放在 table 標記裏的屬性。
這條命令等效於 \pset tableattr table_options。
\timing
切換每 SQL 語句使用的時間,單位是毫秒。
\w {filename | |command}
將當前查詢緩沖區輸出到檔案 filename 或者定向到 Unix 命令
command。
\x 切換擴展行格式。等效於 \pset expanded。
\z [ pattern ]
生成一荓a有訪問權列表的數據庫中所有表的列表。
如果給出任何pattern,則被當成一茬W則表達式, 只顯示匹配的表。
命令 grant(7) 和 revoke(7) 用於設置訪問權。 參閱 grant(7)
獲取更多信息。
這是 \dp("顯示權")的別名。
\! [ command ]
返回到一蚇W立的 Unix shell 或者執行 Unix 命令 command。
參數不會被進一步解釋,shell 將看到全部參數。
\? 獲得關於反斜槓命令的幫助信息。
各種 \d 命令都接受一 pattern 參數,聲明n顯示的對象名字。*
表示"任何字符序列", 而 ? 表示"任何單茼r符"。(這茠磳靰k和 Unix 的
shell 檔名模式相容。)
高級使用者也可以使用正則表達式表示法,比如字符表,[0-9]
這樣的東西來匹配"任意數字"。 n讓任何這些模式匹配字符可以安字-
惜閬☆悛R,那就應該用雙引號包圍它怴C
一茈]含(無引號的)句點的模式會被解析承一蚍狾’W的模式後掘繺菑@-
蚢龠H名的模式。 比如, \dt foo*.bar* 顯示所有以foo 開頭的模式裏的以 bar
開頭的表名字。 如果沒有出現句點,那麼這-
蚍狾‘u匹配在當前模式搜索路徑中可見的對象。
如果完全省略 pattern 參數, 那麼 \d
命令顯示所有在當前模式搜索路徑中可見的對象。
n查閱在數據庫中的所有對象,使用模式 *.*。
ADVANCED FEATURESS性
VARIABLESq
psql 提供類似通常 Unix 命令 shell 那樣的變量替換特性。
變量只是簡單的名稱/數鵅A 這裏的i以是任何長度的任何Cn設置一-
蚥僆q,使用 psql 元命令 \set:
testdb=> \set foo bar
把變量"foo" 設置為 "bar"。 n檢索變量的內容,在變量名前-
惟韙W冒號然後把它用在任意斜槓命令裏:
testdb=> \echo :foo
bar
Note: 注意: \set 的參數服從和其他命令一樣的替換規則。
因此你可以構造有趣的引用,像 \set :foo 'something' 這樣,
獲得分別像Perl或 PHP那樣有名的"軟連接(soft links)"或"變量
變量"。 不幸的是(或者
萬幸的?),用這些構造不能做任何有用的事情。另一方情A \set bar
:foo 是一茷D常有效的拷貝變量的方法。
如果你不帶第二荌捊掍 \set, 那麼只是設置這蚥僆q而沒有C n-
姜m(或刪除)一蚥僆q,使用命令 \unset。
psql 的內部變量可以包括任意順序, 任意數量的字母,數字和下劃線。
有一些常用變量被 psql 另眼相待。它怓O一些選項設置,
這些選項在運行時可以通過改變變量的峈怬幭雂@些應用的表現狀態而改變。
儘管你可以把這些變量用於其他用途,但是我-
怳ㄨ社y這麼做,因為程式的特性可能會很快變得非常奇怪。
通常,所有特殊對待的變量都是由大寫字母組成(可能還有數字和下劃線)。
為了保証和未來的最大度的相容性,請避免使用這樣的變量。 下惇O一-
茤狾陳S殊對待的變量列表。
AUTOCOMMIT
如果是 on(預設),那麼每 SQL 命令都在成功完成後自動提交。
n推遲這種模式下的提交,你必須輸入一 BEGIN 或者 START
TRANSACTION SQL 命令。 如果是 off 或者未設置,SQL
命令不會提交,知道你明確地發出 COMMIT 或者 END。
關閉自動提交的模式是通過為你明確發出一 BEGIN 實現的,
它是放在任何尚未在一茖穭尹疇B自己不是 BEGIN
或者其它事務控制命令的前情C
Note: 注意:
在關閉自動提交的模式下,你必須明確放棄任何失敗的事務,方法是執行
ABORT 或者 ROLLBACK。 還-
n注意如果你不提交就退出會話,你的工作會丟失。
Note: 注意: 自動提交打開方式是 PostgreSQL 傳統的行為,
但是關閉自動提交更接近 SQL
規範。如果你喜歡關閉自動提交,你應該在你的 .psqlrc
檔案裏設置它。
DBNAME 你正在聯接著的數據庫名稱。 每次你與一蚍畬w聯結都會設置這-
]包括程式啟動),但是可以刪除。
ECHO 如果置為 all, 輸入的或者來自一-
蚑Z本的所有行在分析或執行前都寫到標準輸出。
n在程式啟動時聲明這些,使用 -a如果設置為 queries, psql
只是在查詢發送給伺服器之前列印出來。 實現這茈\能的命令行選項是
-e。
ECHO_HIDDEN
當設置了這蚥僆q並且一茪炱袟b命令查詢數據庫時,漸顯示查詢。
這樣你可以學習 PostgreSQL
內部的東西並且在你自己的程式裏提供類似功能。如果你設置該變量的-
"noexec",查詢只是顯示出來但是實際上不發送到伺服器和執行。
ENCODING
當前的客戶端字符集編碼。
HISTCONTROL
如果這蚥僆q設置為 ignorespace,
以空格開始的行將不會進入歷史列表。 如果設置為變量 ignoredups,
與以前歷史記錄裏匹配的行也不會進入歷史記錄。 ignoreboth是上惆-
茠熊畢X。 如果刪除此變量或者其陞籉騠P上悸瘓不同的東西,
所有交互模式讀入的行都被保存入歷史列表。
Note: 注意: 這荅S性是無恥地從 bash 裏剽竊來的。
HISTSIZE
存在命令歷史裏的命令的蚍C預設O 500。
Note: 注意: 這荅S性是無恥地從 bash 裏剽竊來的。
HOST 當前你正聯接的數據庫伺服器主機。
這是在每次你與數據庫聯接時(包括程式啟動)設置的,但是可以刪除。
IGNOREEOF
如果刪除此變量,向一茈璊洩 psql會話發送一 EOF (通常是
Control+D)將終止應用。如果設置為一蚍rA那麼在應用終止前該數-
EOF 字符將被忽略。 如果設置了此變量但是沒有數字A預設是
10。
Note: 注意: 這荅S性是無恥地從 bash 裏剽竊來的。
LASTOID
最後影響的oidA即為從一條 INSERT 或 lo_insert 命令返回的C
此變量只保証在下一條 SQL 命令的結果顯示之前有效。
ON_ERROR_STOP
預設時,如果非交互的稿本碰到一蚇欞~,像一條錯誤的 SQL
命令或者內部元命令,處理會繼續進行。 這是 psql 的傳統特性,
但是有時唭确不太希望這樣。如果設置了這-
蚥僆q,稿本處理將馬上停止。 如果該稿本是從另外一蚑Z本調用的,那-
蚑Z本也會按同樣的方式停止。 如果最外層的稿本不是從一次交互的
psql 會話中調用的而是用 -f 選項調用的,psql 將返回錯誤代碼
3,以示這荓〞p與P命錯誤條件的區別(錯誤代碼 1)。
PORT 當前你正在聯接的數據庫伺服器的端口。
這是在每次你與數據庫聯接時(包括程式啟動)設置的,但是可以刪除。
PROMPT1
PROMPT2
PROMPT3
這些指明psql 顯示的提示符看上去像什麼。 參閱下悸 "Prompting
提示符"。
QUIET 這蚥僆q等效於命令行選項 -q。 可能在交互模式下沒有什麼用。
SINGLELINE
這蚥僆q等效於設置命令行選項 -S。你可以在運行時刪除或設置它。
SINGLESTEP
這蚥僆q等效於命令行選項 -s。
USER 當前你正用於聯接的數據庫使用者。
這是在每次你與數據庫聯接時(包括程式啟動)設置的,但是可以刪除/-
姜m。
VERBOSITY
這蚇龠等i以設置為 default,verbose,或者 terse
以控制錯誤報告的冗餘行。
SQL INTERPOLATIONN換
一茠加的 psql 變量的有用特性是你可以把它抴懂哄]"代換")成正規的 SQL
語句。這樣做的語法同樣還是變量名前悼[一茷_號(:)。
testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;
將會查詢表my_table。變量的O逐字拷貝的,
所以它甚至可以包含不對稱的引號或反斜槓命令。你必須保証你輸入的東西是有意義的。
變量替換將不會在引號引起來的 SQL 語句裏接o生。
利用這茈\能的一荇伒鴘瑰野峎O通過使用一蚗H後的語句中最後插入的 OID
建立一茈~鍵仿真場景。 另一茈i能用到這蚞魖謇漲a方是把一-
蚗仵蛌漱漁e拷貝到一茼r段裏悼h。 漸把檔案裝載到一蚥僆q然後像上-
惆獐佼B理。
testdb=> \set content '\'' `cat my_file.txt` '\''
testdb=> INSERT INTO my_table VALUES (:content);
這樣處理的一茈i能問題是 my_file.txt 可能包含單引號。這些需-
n被逃逸以免在處理第三行時不會導P語法錯誤。 可以使用程式 sed 來做這-
茬B理:
testdb=> \set content '\'' `sed -e "s/'/\\\\\\'/g" < my_file.txt` '\''
觀察正確數量的反斜槓(6)!你可以這樣解釋它:在 psql
分析完這行後,它把 sed -e "s/'/\\\'/g" < my_file.txt 傳遞給shell。
shell 將對雙引號裏的東西做其處理然後用參數 -e 和
s/'/\\'/g 執行 sed。當 sed分析這些時, 它將把雙反斜槓替換為單-
茪炱袟b然後進行替換。 可能有時唭A認為所有 Unix 命令使用同一荌k逸字符是-
茼n事。 但具有諷刺意味的事實是你可能不得不逃逸所有反斜槓,因為 SQL
文本常量同樣也慘遭這種解釋。 這種情況下你可能最好在外部準備檔案。
因為冒號也可以合法的出現在 SQL 命令裏,便有下掖W則的應用:
如果沒有設置變量,字符序列 "冒號+名稱" 不會被改變。
在任何情況下你都可以用反斜槓逃逸冒號以保護它免於被解釋。
(變量的冒號語法是 SQL 用於嵌入查詢語言的標準,如
ECPG。用於數組片段和類型轉換的冒號語法是 PostgreSQL
擴展,因此有沖突。)
PROMPTING符
psql 使用的提示符可以根據你的喜好客戶化。三蚥僆q PROMPT1,PROMPT2,和
PROMPT3 包含描z提示符的外觀的字串和特殊逃逸序列。Prompt 1 是 psql
請求一虓s命令時的使用的正常提示符。 Prompt 2 是在一-
茤R令輸入期待更多輸入時(因為查詢沒有用一-
茪戲僱異籇峈怳瑏麂S有關閉)顯示的提示符。 Prompt 3 在你運行一 SQL COPY
命令和等待你在終端上鍵入記錄時使用。
相應的提示符變量的O按字惘C印的,除非碰到一-
茼吨戲飽]%)。這時某些其他的文本被替換, 替換為何物取決於下一-
茼r符。已定義的替換是:
%M 數據庫伺服器主機名全名(帶著域名),如果聯接是通過 Unix
域套接字進行的就是 [local], 或者如果 Unix
域套接字不是編譯的預設位置,就是 [local:/dir/name]。
%m 數據庫伺服器的主機名刪去第一蚋I後悸熙﹞應悀U的東西。
或者如果聯接是通過 Unix 域套接字,就是 [local]。
%> 數據庫伺服器正在偵聽的端口號。
%n 數據庫會話的使用者名。 (這蚧的擴展可能在一-
蚍畬w會話過程中因為 SET SESSION AUTHORIZATION 命令而改變。)
%/ 當前數據庫名稱。
%~ 類似 %/, 但如果數據庫是你的預設數據庫輸出是"~"
(波浪線(tilde))。
%# 如果會話使用者是數據庫超級使用者,使用 "#",否則用">"。 (這-
甄X展可能在一蚍畬w會話過程中因為 SET SESSION AUTHORIZATION
命令而改變。)
%R 對於 prompt 1 通常是 =,但是如果是單行模式則是
^,而如果會話與數據庫斷開(如果
%x 事務狀態:如果不在事務塊裏,是一茠臟r串,如果在事務塊裏,是 *,
如果在一茈2悛漕鐒堿O !,或者無法判斷事務狀態時為 ?
(比如,因為沒有連接)。
%digits
如果 digits 以 0x 開頭, 那麼其餘字符被解釋成一-
茪Q六進制數字並且替換為對應(十六進制碼)的字符。 如果第一-
蚍r是 0,該字符被解釋成一-
茪K進制數字並且替換為對應的(八進制碼)的字符。 否則認為是一-
茪Q進制數字。
%:name:
psql變量name的C參閱 "Variables 變量" 節獲取細節。
%`command`
command的輸出, 類似於通常的反引號(back-tick)替換。
n在提示符裏插入百分號,鍵入%%。預設提示符等效於 '%/%R%# ' 用於 prompts
1 和 2,以及'>> ' 用於 prompt 3。
Note: 注意: 這荅S性是無恥地從tcsh 裏剽竊來的。
COMMAND-LINE EDITINGROs輯
psql 為了編輯和檢索命令行的方便支持 readline 和歷史庫。
命令歷史存放在你的家目錄的一茈s .psql_history 的檔案裏, 並且當 psql
啟動的時埸|裝載進來。 還支持 Tab 補齊,儘管該補齊邏輯並不是一 SQL
分析器必備的。 如果因某些鴞]你不喜歡 tab 補齊,你可以把下-
探X行放在你的家目錄的一茈s .inputrc 的檔案裏關閉這荅S性:
$if psql
set disable-completion on
$endif
(這不是 psql 的特性, 是 Readline 的。參考它的文件獲取更多細節。)
ENVIRONMENT境
HOME 初始化檔案(.psqlrc)和命令歷史檔案(.psql_history)的目錄。
PAGER 如果查詢結果在一嫁堜韙ㄓU,那麼它抭Q定向到這茤R令。 典型的O
more 或者 less。 預設的是孕x相關的。我怚i以用 \pset 命令關閉分-
馮飽C
PGDATABASE
預設連接的數據庫
PGHOST
PGPORT
PGUSER 預設連接參數
PSQL_EDITOR
EDITOR
VISUAL \e 命令使用的編輯器。這些變量是按照上悸熄陽邠d的;設置最-
的最先使用。
SHELL \! 命令執行的命令。
TMPDIR 存儲臨時檔案的目錄。預設是 /tmp。
FILES
o 在啟動之前,psql 視圖讀取並 執行來自檔案 $HOME/.psqlrc 的命令。
它將用於設置客戶端或者伺服器的榆獢]使用 \set 和 SET 命令)。
o 命令行歷史存儲在 $HOME/.psql_history。
NOTES`N
o 一些 psql的朽薊岩誘像\一茬璁r母的反斜槓命令(元命令)的第一-
荌捊蔣絡穧b命令後情A 而不用空白間隔。出於相容性鴞],這-
荅S性仍然在某些程度上被支持,但是我不準備在這裏詳細解釋,因為我不鼓勵這樣使用。
不過如果你收到莫名其妙的信息,想想這茈峈k。例如
testdb=> \foo
Field separator is "oo".
可能不是你想n的東西。
o psql 只能與同版本的伺服器永地工作。
這不意味著其他組合會完全失敗,但是可能有微小的或者不那麼微小的問題。
如果伺服器的版本不同,反斜槓命令是特別容易失效的。
EXAMPLESl
第一茖狺l演示了如何把一茯d詢分成多茼瘨i行輸入。注意提示符的變化:
testdb=> CREATE TABLE my_table (
testdb(> first integer not null default 0,
testdb(> second text
testdb-> );
CREATE TABLE
現在再看看表定義:
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=>
假設你用數據填充了表並且想看一眼:
peter@localhost testdb=> SELECT * FROM my_table;
first | second
-------+--------
1 | one
2 | two
3 | three
4 | four
(4 rows)
你可以用 \pset 命令讓這茯d詢看起來不一樣:
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
者
Postgresql <laser@pgsqldb.org>