Manpages

NAME

psql - PostgreSQL 交 互 終 端

SYNOPSIS

psql [option...] [dbname [username]]

DESCRIPTION 描 述

psql 是 一 個 以 終 端 爲 基 礎 的 PostgreSQL 前 端 。 它 允 許 你 交 互 地 鍵 入 查 詢 , 把 它 們 發 出 給 PostgreSQL, 然 後 看 看 查 詢 的 結 果 。 另 外 , 輸 入 可 以 來 自 一 個 文 件 。 還 有 , 它 提 供 了 一 些 元 命 令 和 多 種 類 shell 地 特 性 來 實 現 書 寫 腳 本 以 及 對 大 量 任 務 的 自 動 化 。

OPTIONS 選 項

-a

--echo-all 在 讀 取 行 時 向 屏 幕 打 印 所 有 內 容 。 這 個 選 項 在 腳 本 處 理 時 比 交 互 模 式 時 更 有 用 。 這 個 選 項 等 效 於 設 置 變 量 ECHO 爲 all。

-A

--no-align 切 換 爲 非 對 齊 輸 出 模 式 。 ( 缺 省 輸 出 模 式 是 對 齊 的 。 )
-c
command
--command
command 聲 明 psql 將 執 行 一 條 查 詢 字 串 , command, 然 後 退 出 。 這 一 點 在 shell 腳 本 里 很 有 用 。 command 必 須 是 一 條 完 全 可 以 被 服 務 器 分 析 的 查 詢 字 串 ( 也 就 是 說 , 它 不 包 含 psql特 有 的 特 性 ) , 或 者 是 一 個 反 斜 槓 命 令 。 這 樣 你 就 不 會 混 合 SQL 和 psql 元 命 令 。 要 想 混 合 使 用 , 你 可 以 把 字 串 定 向 到 psql 裏 , 象 這 樣 : echo "\x\ select * from foo;" | psql。 如 果 命 令 字 串 包 含 多 個 SQL 命 令 , 那 麼 他 們 在 一 個 事 務 裏 處 理 , 除 非 在 字 串 裏 包 含 了 明 確 的 BEGIN/COMMIT 命 令 把 他 們 分 成 多 個 事 務 。 這 個 和 從 psql 的 標 準 輸 入 裏 給 它 填 充 相 同 字 串 不 同 。
-d
dbname
--dbname
dbname 聲 明 想 要 聯 接 的 數 據 庫 名 稱 。 等 效 於 在 命 令 行 行 上 把 dbname 聲 明 爲 第 一 個 非 選 項 參 數 。

-e

--echo-queries 顯 示 所 由 發 送 給 服 務 器 的 查 詢 。 等 效 於 把 變 量 ECHO 設 置 爲 queries。

-E

--echo-hidden 回 顯 由 \d 和 其 他 反 斜 槓 命 令 生 成 的 實 際 查 詢 。 如 果 你 希 望 在 你 自 己 的 程 序 裏 包 含 類 似 的 功 能 , 你 就 可 以 使 用 這 個 選 項 。 這 等 效 於 在 psql裏 設 置 變 量 ECHO_HIDDEN。
-f
filename
--file
filename 使 用 filename作 爲 命 令 的 語 句 源 而 不 是 交 互 式 讀 入 查 詢 。 在 處 理 完 文 件 後 , psql 結 束 。 這 個 選 項 在 很 多 方 面 等 效 於 內 部 命 令 \i。 如 果 filename 是 - ( 連 字 符 ) , 則 從 標 準 輸 入 讀 取 。 使 用 這 個 選 項 與 用 psql < filename 有 微 小 的 區 別 。 通 常 , 兩 者 都 回 按 照 你 預 期 那 樣 運 行 , 但 是 使 用 -f打 開 了 一 些 很 好 的 特 性 , 比 如 帶 行 號 的 錯 誤 信 息 。 而 且 , 使 用 這 個 選 項 還 有 可 能 有 減 小 啓 動 負 荷 的 機 會 。 另 一 方 面 , 如 果 你 把 所 有 內 容 手 工 輸 入 , 使 用 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

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

-pport

--portport 聲 明 被 服 務 器 偵 聽 的 TCP 端 口 或 使 用 的 缺 省 本 地 Unix 主 控 套 接 字 文 件 句 柄 。 缺 省 的 是 環 境 變 量 PGPORT的 值 , 如 果 沒 有 設 置 的 話 是 編 譯 是 聲 明 的 端 口 , 通 常 是 5432。
-P
assignment
--pset
assignment 允 許 你 在 命 令 行 上 以 \pset 的 風 格 設 置 打 印 選 項 。 要 注 意 的 是 你 在 這 裏 用 等 號 分 割 名 稱 和 值 , 而 不 能 用 空 格 。 因 此 要 把 輸 出 格 式 設 置 爲 LaTeX, 你 可 以 敲 入 -P format=latex。

-q

--quiet 聲 明 psql 將 安 靜 地 執 行 處 理 任 務 。 缺 省 時 psql將 打 印 歡 迎 和 許 多 其 他 輸 出 信 息 。 如 果 使 用 了 此 選 項 , 這 些 都 不 出 現 。 這 在 和 -c 選 項 一 起 使 用 時 很 有 效 。 在 psql 裏 , 你 可 以 通 過 設 置 QUIET 變 量 實 現 同 樣 效 果 。
-R
separator
--record-separator
separator 使 用 separator 做 爲 記 錄 分 隔 符 。 等 效 於 \pset recordsep 命 令 。

-s

--single-step 進 入 單 步 模 式 運 行 。 意 味 着 每 個 查 詢 在 發 往 服 務 器 之 前 都 要 提 示 用 戶 , 用 這 個 選 項 也 可 以 取 消 執 行 。 此 選 項 主 要 用 於 調 試 腳 本 。

-S

--single-line 進 入 單 行 運 行 模 式 , 這 時 每 個 命 令 都 將 由 換 行 符 結 束 , 象 分 號 那 樣 。

Note: 注 意 : 注 意 這 個 模 式 是 給 那 些 堅 持 要 這 個 特 性 的 人 的 , 我 們 不 鼓 勵 你 這 麼 用 。 實 際 上 , 如 果 你 在 一 行 裏 混 合 使 用 SQL 和 元 命 令 , 執 行 的 順 序 對 不 熟 練 的 用 戶 而 言 不 總 是 清 晰 的 。

-t

--tuples-only 關 閉 打 印 列 名 稱 和 結 果 行 計 數 腳 註 等 信 息 。 完 全 等 效 於 元 命 令 \t
-T
table_options
--table-attr
table_options 允 許 你 聲 明 放 在 HTML table 標 記 裏 的 選 項 。 參 閱 \pset 獲 取 細 節 。

-u

psql 在 和 數 據 庫 聯 接 之 提 示 輸 入 用 戶 的 用 戶 名 和 口 令 。

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

-Uusername
--username
username 以 用 戶 username 代 替 缺 省 用 戶 與 數 據 庫 聯 接 。 ( 當 然 , 你 必 須 有 這 麼 做 的 權 限 。 )
-v
assignment
--set
assignment
--variable
assignment 進 行 一 次 變 量 分 配 , 象 內 部 命 令 \set 那 樣 。 注 意 , 如 果 有 變 量 名 和 值 的 話 , 你 必 須 在 命 令 行 上 用 等 號 分 隔 它 們 。 要 重 置 一 個 變 量 , 去 掉 等 號 。 這 個 分 配 是 在 啓 動 的 很 早 的 階 段 進 行 的 , 所 以 爲 內 部 使 用 保 留 的 變 量 可 能 被 再 次 覆 蓋 。

-V

--version 顯 示 psql版 本 。

-W

--password 要 求 psql 在 與 一 個 數 據 庫 聯 接 前 提 示 輸 入 口 令 。 這 個 選 項 將 在 整 個 會 話 過 程 中 有 效 , 即 使 你 用 元 命 令 \connect 改 變 了 所 聯 接 的 數 據 庫 。 在 當 前 版 本 里 , 如 果 服 務 器 要 求 口 令 認 證 , psql 自 動 提 出 一 個 口 令 提 示 符 。 因 爲 目 前 這 個 特 性 是 以 一 個 “hack”爲 基 礎 , 自 動 識 別 有 可 能 奇 怪 地 失 效 , 因 此 用 這 個 選 項 強 制 一 個 提 示 符 。 如 果 沒 有 聲 明 口 令 提 示 符 而 服 務 器 要 求 口 令 認 證 , 那 麼 聯 接 企 圖 將 失 敗 。

-x

--expanded 打 開 擴 展 表 格 式 模 式 。 等 效 於 \x

-X,

--no-psqlrc 不 讀 取 啓 動 文 件 ~/.psqlrc

-?

--help 顯 示 關 於

psql命 令 行 參 數 的 幫 助 。

EXIT STATUS 退 出 狀 態

如 果 正 常 結 束 , 那 麼 psql 向 shell 返 回 0, 如 果 自 身 發 生 致 命 錯 誤 , 則 返 回 1( 內 存 用 盡 , 未 找 到 文 件 等 ) , 如 果 和 數 據 庫 的 連 接 失 效 而 且 會 話 不 再 活 躍 則 返 回 2, 如 果 腳 本 中 發 生 錯 誤 並 且 設 置 了 ON_ERROR_STOP 則 返 回 3。

USAGE 用 法

CONNECTING TO A DATABASE 與 一 個 數 據 庫 聯 接
psql
是 一 個 普 通 的 PostgreSQL 客 戶 端 應 用 。 爲 了 與 一 個 數 據 庫 聯 接 , 你 需 要 知 道 你 的 目 標 數 據 庫 , 服 務 器 的 主 機 名 和 端 口 號 以 及 你 希 望 以 哪 個 用 戶 的 身 份 進 行 聯 接 等 信 息 。 我 們 可 以 通 過 命 令 行 參 數 告 訴 psql 這 些 信 息 , 分 別 是 -d, -h, -p, 和 -U。 如 果 有 個 參 數 不 屬 於 任 何 選 項 開 關 , 那 麼 它 會 被 解 釋 成 數 據 庫 名 ( 或 者 是 用 戶 名 - 如 果 數 據 庫 名 稱 也 給 出 了 。 ) 。 不 是 所 有 這 些 選 項 都 是 必 須 的 , 缺 省 的 也 可 以 。 如 果 你 省 略 主 機 名 , psql 將 通 過 Unix 域 套 接 字 與 本 地 主 機 的 服 務 器 相 聯 。 缺 省 的 端 口 號 是 編 譯 時 確 定 的 。 因 爲 數 據 庫 服 務 器 使 用 同 樣 的 缺 省 值 , 所 以 在 大 多 數 設 置 下 , 你 可 能 不 需 要 聲 明 端 口 號 。 缺 省 的 用 戶 名 是 你 的 Unix 用 戶 名 , 與 數 據 庫 同 名 。 要 注 意 的 是 你 不 能 用 任 意 用 戶 名 與 任 何 數 據 庫 相 聯 。 你 的 數 據 庫 管 理 員 應 該 告 訴 你 你 的 訪 問 權 限 。 你 可 以 通 過 設 置 幾 個 環 境 變 量 PGDATABASE, PGHOST, PGPORT 和 PGUSER 爲 對 應 的 值 的 方 法 節 約 幾 次 敲 擊 。 如 果 因 爲 任 何 原 因 而 無 法 與 數 據 庫 相 聯 ( 例 如 , 權 限 不 夠 , 服 務 器 沒 有 運 行 等 ) , psql 將 返 回 一 個 錯 誤 並 退 出 。

ENTERING SQL COMMANDS 輸 入 SQL 命 令 通 常 狀 況 下 , psql 提 供 一 個 帶 有 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=> 用 戶 可 以 在 這 個 提 示 符 下 鍵 入 SQL 查 詢 。 通 常 , 輸 入 的 行 將 在 命 令 終 止 分 號 出 現 時 送 到 服 務 器 。 一 行 的 終 止 並 不 結 束 命 令 ! 因 此 命 令 可 以 因 清 晰 起 見 跨 越 好 幾 行 。 如 果 命 令 發 送 出 去 而 且 沒 有 錯 誤 , 命 令 結 果 會 顯 示 在 屏 幕 上 。 當 命 令 正 在 進 行 時 , psql 同 樣 還 輪 詢 由 LISTEN [listen(7)] 和 NOTIFY [notify(7)] 生 成 的 異 步 通 知 信 號 。

META-COMMANDS 元 命 令 你 在 psql 裏 輸 入 的 任 何 以 不 帶 引 號 的 反 斜 槓 ( ’\’) 開 頭 的 東 西 都 是 psql 元 命 令 , 這 些 命 令 是 由 psql 自 己 處 理 的 。 這 些 命 令 也 是 令 psql 可 用 於 管 理 或 書 寫 腳 本 的 原 因 。 元 命 令 更 常 見 的 叫 法 是 斜 槓 或 反 斜 槓 命 令 。 一 個 psql 命 令 的 格 式 是 反 斜 槓 後 面 緊 跟 一 個 命 令 動 詞 , 然 後 是 任 意 參 數 。 參 數 與 命 令 動 詞 和 其 他 參 數 以 任 意 個 空 白 字 符 間 隔 。 要 在 參 數 裏 面 包 含 空 白 , 你 必 須 用 單 引 號 把 它 包 圍 起 來 。 要 在 這 樣 的 參 數 裏 包 含 單 引 號 , 前 面 加 一 個 反 斜 槓 。 任 何 包 含 在 單 引 號 裏 的 東 西 會 被 進 一 步 進 行 類 C 的 替 換 , 把 \n (new line),\t (tab), \digits, \0digits, 和 \0xdigits ( 給 出 的 十 進 制 , 八 進 制 , 或 十 六 進 制 碼 的 字 符 ) 替 換 掉 。 如 果 一 個 不 帶 引 號 的 參 數 以 冒 號 ( :) 開 頭 , 它 會 被 當 作 一 個 psql 變 量 , 並 且 該 變 量 的 值 會 最 終 成 爲 真 正 的 參 數 值 。 ( 譯 註 : 類 似 ecpg 和 pl/pgsql 的 變 量 用 法 。 ) 用 反 引 號 ( "backticks" ’) 包 圍 的 內 容 被 當 作 一 個 命 令 行 傳 入 shell。 該 命 令 的 輸 出 ( 刪 除 了 結 尾 的 新 行 ) 被 當 作 參 數 值 。 上 面 描 述 的 逃 逸 ( 字 符 ) 序 列 在 反 引 號 裏 也 生 效 。 有 些 命 令 以 一 個 SQL 標 識 的 名 稱 ( 如 , 一 個 表 名 ) 爲 參 數 。 這 些 參 數 遵 循 SQL 語 法 關 於 雙 引 號 的 規 則 : 不 帶 雙 引 號 的 標 識 強 制 成 小 寫 , 而 雙 引 號 保 護 字 母 不 受 大 小 寫 轉 換 , 並 且 允 許 在 標 識 符 中 使 用 空 白 。 在 雙 引 號 中 , 成 對 的 雙 引 號 在 結 果 名 字 中 分 析 成 一 個 雙 引 號 。 比 如 , FOO"BAR"BAZ 解 析 成 fooBARbaz, 而 "A weird"" name" 變 成 A weird" name。 name. 對 參 數 的 分 析 在 碰 到 另 一 個 不 帶 引 號 的 反 斜 槓 時 停 止 。 這 裏 會 認 爲 是 一 個 新 的 元 命 令 的 開 始 。 特 殊 序 列 \\ ( 雙 反 斜 槓 ) 標 識 參 數 的 結 尾 並 將 繼 續 分 析 後 面 的 SQL 命 令 ( 如 果 存 在 的 話 ) 。 這 樣 SQL 和 psql命 令 可 以 自 由 的 在 一 行 裏 面 混 合 。 但 是 在 任 何 情 況 下 , 一 條 元 命 令 的 參 數 不 能 延 續 超 過 行 尾 。 下 列 元 命 令 是 已 定 義 的 :

\a 如 果 目 前 的 表 輸 出 格 式 是 不 對 齊 的 , 切 換 成 對 齊 的 。 如 果 是 對 齊 的 , 切 換 成 不 對 齊 。 這 條 命 令 是 爲 了 向 後 兼 容 。 參 閱

\pset 獲 取 一 個 通 用 的 解 決 方 法 。
\cd [
directory] 把 當 前 工 作 目 錄 改 變 到 directory。 沒 有 參 數 是 則 改 變 到 當 前 用 戶 的 家 目 錄 。

Tip: 提 示 : 要 打 印 出 你 的 當 前 工 作 目 錄 , 使 用 \!pwd.

\C [title ] 把 正 在 打 印 的 表 的 標 題 設 置 爲 一 個 查 詢 的 結 果 或 者 取 消 這 樣 的 設 置 。 這 條 命 令 等 效 於 \pset titletitle. ( 這 條 命 令 的 名 稱 源 於 "caption", 因 爲 以 前 只 是 用 於 在 一 個 HTML 表 裏 面 設 置 標 題 。 )
\connect (or\c) [
dbname [username ] ] 與 一 個 新 的 數 據 庫 建 立 一 個 聯 接 , 使 用 /不 用 一 個 用 戶 名 。 前 面 的 聯 接 將 關 閉 。 如 果 dbname 是 -, 那 麼 就 假 設 是 當 前 數 據 庫 名 稱 。 如 果 省 略 username, 則 假 設 是 當 前 用 戶 名 。 作 爲 一 條 特 殊 規 則 , 不 帶 任 何 參 數 運 行 \connect 將 以 缺 省 用 戶 身 份 與 缺 省 數 據 庫 連 接 ( 正 如 你 不 帶 任 何 參 數 運 行 psql 一 樣 。 ) 如 果 聯 接 失 敗 ( 用 戶 名 錯 , 訪 問 拒 絕 等 ) , 那 麼 將 保 留 前 面 的 聯 接 --當 且 僅 當 在 psql 處 於 交 互 模 式 下 如 此 。 如 果 運 行 的 是 非 交 互 的 腳 本 , 處 理 會 馬 上 停 止 , 並 返 回 一 個 錯 誤 。 選 擇 這 樣 的 區 別 是 一 方 面 爲 用 戶 使 用 方 便 考 慮 , 另 一 方 面 爲 保 證 腳 本 不 會 碰 巧 操 作 了 錯 誤 的 數 據 庫 的 安 全 機 制 考 慮 的 。
\copy
table 執 行 前 端 ( 客 戶 端 ) 拷 貝 。 這 是 一 個 運 行 SQL COPY 命 令 的 操 作 , 不 同 的 是 SQL COPY 是 服 務 器 在 讀 寫 指 明 的 文 件 , 而 psql 讀 寫 文 件 並 作 爲 本 地 的 文 件 系 統 和 服 務 器 之 間 的 路 由 取 出 或 寫 入 數 據 。 這 意 味 着 文 件 訪 問 性 和 權 限 都 是 本 地 用 戶 的 , 而 不 是 服 務 器 的 , 因 此 不 需 要 SQL 超 級 用 戶 權 限 。 這 條 命 令 的 語 法 是 模 擬 SQL COPY 命 令 的 。 ( 參 考 它 的 描 述 獲 取 細 節 。 ) 要 注 意 的 是 由 此 而 來 , 有 一 些 特 殊 的 分 析 規 則 應 用 於 \copy 命 令 。 尤 其 是 變 量 替 換 規 則 和 反 斜 槓 代 換 規 則 不 起 作 用 。

Tip: 提 示 : 此 操 作 不 象 SQL COPY 命 令 這 樣 高 效 , 因 爲 所 有 數 據 必 須 通 過 客 戶 端 /服 務 器 聯 接 。 對 於 大 數 據 量 的 操 作 , 另 一 種 方 法 更 可 行 。

Note: 注 意 : 注 意 在 客 戶 端 和 服 務 器 拷 貝 時 對 stdin 和 stdout 的 解 釋 的 區 別 : 在 前 端 拷 貝 時 , 這 些 總 是 指 psql的 輸 入 和 輸 出 流 。 在 服 務 器 拷 貝 時 stdin 來 自 COPY 本 身 的 標 準 輸 入 ( 比 如 , 一 個 帶 有 -f 選 項 的 腳 本 ) , 而 stdout 指 的 是 查 詢 輸 出 流 ( 參 閱 下 面 的 \o 元 命 令 ) 。

\copyright 顯 示 PostgreSQL 的 版 權 和 版 本 信 息 。
\d [
pattern ] 對 於 每 個 匹 配 pattern的 關 係 ( 表 , 視 圖 , 索 引 或 者 序 列 ) , 顯 示 所 有 列 , 它 們 的 類 型 , 和 任 何 特 殊 屬 性 , 象 NOT NULL或 缺 省 等 - - 只 要 存 在 。 如 果 實 際 上 這 個 關 係 是 一 個 表 , 任 何 已 定 義 的 索 引 , 主 鍵 , 唯 一 約 束 相 關 的 索 引 , 規 則 , 約 束 , 和 觸 發 器 也 同 樣 顯 示 出 來 , 如 果 關 係 是 一 個 視 圖 , 還 顯 示 視 圖 的 定 義 。 ( "匹 配 模 式 "在 下 面 定 義 。 ) 從 \d+ 來 的 命 令 也 是 一 樣 的 , 只 不 過 還 顯 示 與 表 的 列 關 聯 的 註 解 。

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

\da [pattern ] 列 出 所 有 可 用 聚 集 函 數 , 以 及 它 們 操 作 的 數 據 類 型 。 如 果 聲 明 瞭 pattern, 那 麼 只 顯 示 匹 配 ( 正 則 表 達 式 ) 的 聚 集 函 數 。
\dc [
pattern ] 列 出 所 有 字 符 集 之 間 的 可 用 轉 換 。 如 果 聲 明 瞭 pattern, 則 只 列 出 那 些 匹 配 模 式 的 轉 換 。

\dC 列 出 所 有 類 型 轉 換 。

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

=>\dd version
Object descriptions
Schema | Name | Object | Description
------------+---------+----------+---------------------------
pg_catalog | version | function | PostgreSQL version string
(1 row) 可 以 用 COMMENT SQL 命 令 生 成 對 對 象 的 描 述 。

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

Note: 注 意 : 爲 了 減 少 混 亂 , \df 並 不 顯 示 數 據 類 型 的 I/O 函 數 。 這 樣 是 通 過 忽 略 那 些 接 受 或 者 返 回 類 型 cstring 的 函 數 實 現 的 。

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

\dl 這 是

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

\dn [pattern ] 列 出 所 有 可 用 模 式 ( 名 字 空 間 ) 。 如 果 聲 明 瞭 pattern ( 一 個 正 則 表 達 式 ) , 那 麼 只 列 出 匹 配 模 式 的 模 式 名 。
\do [
pattern ] 列 出 所 有 可 用 操 作 符 , 以 及 它 們 的 操 作 數 和 返 回 的 數 據 類 型 。 如 果 聲 明 瞭 pattern, 那 麼 只 顯 示 匹 配 模 式 的 操 作 符 。
\dp [
pattern ] 生 成 一 列 可 用 的 表 和 它 們 相 關 的 權 限 。 如 果 聲 明 瞭 pattern, 那 麼 只 列 出 名 字 可 以 匹 配 模 式 的 表 。 命 令 grant(7)revoke(7) 用 於 設 置 訪 問 權 限 。 參 閱 grant(7) 獲 取 更 多 信 息 。
\dT [
pattern ] 列 出 所 有 數 據 類 型 或 只 顯 示 那 些 匹 配 pattern的 。 這 條 命 令 的 \dT+ 形 式 顯 示 更 多 信 息 。
\du [
pattern ] 列 出 所 有 已 配 置 用 戶 或 者 只 列 出 那 些 匹 配 pattern 的 用 戶 。
\edit (or\e) [
filename ] 如 果 聲 明 瞭 filename, 則 編 輯 此 文 件 並 且 在 編 輯 器 退 出 後 將 其 內 容 拷 貝 回 查 詢 緩 衝 區 。 如 果 沒 有 給 出 參 數 , 則 把 當 前 查 詢 緩 衝 區 內 容 拷 貝 到 一 個 臨 時 文 件 然 後 以 相 同 方 式 編 輯 。 然 後 根 據 一 般 的 psql規 則 重 新 分 析 查 詢 緩 衝 區 , 這 時 整 個 緩 衝 區 當 作 一 個 單 行 。 ( 因 此 你 無 法 用 這 個 方 法 制 作 “腳 本 ”, 用 \i 做 腳 本 。 ) 這 還 意 味 着 如 果 該 查 詢 以 分 號 結 尾 ( 或 者 包 含 分 號 ) , 它 就 會 馬 上 被 執 行 。 否 則 它 只 是 在 查 詢 緩 衝 區 裏 等 待 。

Tip: 提 示 : psql 搜 索 環 境 變 量 PSQL_EDITOR, EDITOR 和 VISUAL( 以 此 順 序 ) 查 找 要 用 到 哪 個 編 輯 器 。 如 果 上 面 的 都 沒 有 設 置 , 使 用 /bin/vi

\echotext [ ... ] 向 標 準 輸 出 打 印 參 數 , 用 一 個 空 格 分 隔 並 且 最 後 跟 着 一 個 新 行 。 這 個 特 性 在 顯 示 腳 本 的 輸 出 時 會 有 用 。 例 如 :

=>\echo ’date’
Tue Oct 26 21:40:57 CEST 1999 果 第 一 個 參 數 是 一 個 無 引 號 的 -n, 那 麼 不 會 寫 出 結 尾 的 新 行 。

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

\encoding [encoding ] 設 置 客 戶 端 字 符 編 碼 方 式 。 不 帶 參 數 時 , 這 條 命 令 顯 示 當 前 的 編 碼 方 式 。
\f [
string ] 爲 不 對 齊 的 查 詢 輸 出 設 置 域 分 隔 符 。 缺 省 時 是 豎 條 ( |) 。 參 閱 \pset 獲 取 設 置 輸 出 選 項 的 通 用 方 法 。
\g [ {
filename | |command } ] 把 當 前 的 查 詢 輸 入 緩 衝 區 的 內 容 發 送 給 服 務 器 並 且 把 輸 出 輸 出 到 可 選 的 filename 或 者 把 輸 出 定 向 到 一 個 獨 立 的 Unix shell 執 行 command。 單 獨 一 個 \g 實 際 上 等 效 於 一 個 分 號 。 一 個 帶 有 參 數 的 \g 是 "一 次 性 "的 \o 命 令 的 代 用 品 。
\help (or\h) [
command ] 給 出 指 定 SQL 命 令 的 語 法 幫 助 。 如 果 沒 有 給 出 command , 那 麼 psql 將 列 出 可 獲 得 語 法 幫 助 的 所 有 命 令 。 如 果 command 是 一 個 星 號 ( "*") , 則 顯 示 所 有 SQL 命 令 的 語 法 幫 助 。

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

\H 打 開

HTML 查 詢 輸 出 格 式 。 如 果 HTML 格 式 已 經 打 開 , 則 切 換 回 缺 省 的

對 齊 的 文 本 格 式 。 這 個 命 令 是 爲 了 兼 容 和 方 便 , 參 閱 \pset 獲 取 設 置 其 他 輸 出 選 項 的 內 容 。

\ifilename 從 文 件 filename中 讀 取 並 把 其 內 容 當 作 從 鍵 盤 輸 入 的 那 樣 執 行 查 詢 。

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

\l (or\list) 列 出 服 務 器 上 所 有 數 據 庫 的 名 字 和 它 們 的 所 有 者 以 及 字 符 集 編 碼 。 在 命 令 名 稱 後 面 加 一 個 "+" 還 可 以 看 到 對 數 據 庫 的 描 述 。
\lo_export
loidfilename 從 數 據 庫 裏 讀 取 OID 爲 loid 的 大 對 象 並 把 她 寫 到 filename裏 。 注 意 這 個 功 能 與 服 務 器 函 數 lo_export 有 些 微 小 的 區 別 , lo_export 運 行 時 帶 着 運 行 數 據 庫 服 務 器 的 用 戶 權 限 , 而 且 是 在 服 務 器 的 文 件 系 統 上 。

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

\lo_importfilename [comment ] 把 文 件 存 儲 爲 一 個 PostgreSQL 大 對 象 。 可 以 帶 着 一 個 該 對 象 的 註 解 選 項 。 例 如 :

foo=>\lo_import ’/home/peter/pictures/photo.xcf’ ’a picture of me’
lo_import 152801 響 應 表 明 此 大 對 象 得 到 一 個 對 象 標 識 152801, 如 果 你 還 想 訪 問 該 對 象 , 就 應 該 把 這 個 對 象 標 識 記 住 。 因 此 , 我 們 建 議 總 是 給 每 個 對 象 關 聯 一 個 人 類 可 讀 的 註 解 。 那 樣 就 可 以 用 \lo_list 命 令 看 到 這 些 註 解 。 注 意 這 條 命 令 與 服 務 器 端 的 lo_import 有 一 些 區 別 , 因 爲 這 條 命 令 是 本 地 用 戶 在 本 地 文 件 系 統 上 操 作 , 而 不 是 以 服 務 器 用 戶 在 服 務 器 文 件 系 統 上 操 作 。

\lo_list 顯 示 一 個 目 前 存 儲 在 該 數 據 庫 裏 的 所 有 PostgreSQL 大 對 象 和 它 們 的 所 有 者 的 列 表 。
\lo_unlink
loid 從 數 據 庫 裏 刪 除 OID爲 loid 的 大 對 象 。

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

\o [ {filename | |command} ] 把 後 面 的 查 詢 結 果 保 存 到 文 件 filename 裏 或 者 把 後 面 的 查 詢 結 果 定 向 到 一 個 獨 立 的 Unix shell 執 行 command。 如 果 沒 有 聲 明 參 數 , 查 詢 輸 出 重 置 爲 標 準 輸 出 。

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

Tip: 提 示 : 要 用 文 本 分 散 查 詢 結 果 之 間 的 輸 出 , 用 \qecho

\p 打 印 當 前 查 詢 緩 衝 區 到 標 準 輸 出 。

\psetparameter [value ] 這 條 命 令 設 置 影 響 查 詢 結 果 表 輸 出 的 選 項 。 parameter 描 述 要 設 置 的 選 項 是 哪 一 個 。 value 的 語 意 也 取 決 於 它 。 可 調 節 的 打 印 選 項 有 :

format 設 置 輸 出 格 式 爲

unaligned, aligned, html, 或 latex之

一 。 允 許 使 用 唯 一 的 縮 寫 。 ( 這 也 意 味 着 一 個 字 母 就 夠 了 。 )

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

border 第 二 個 參 數 必 須 是 一 個 數 字 。 通 常 , 數 字 越 大 , 表 就 有 越 寬 的 邊 界 和 越 多 的 線 , 但 是 這 個 參 數 取 決 於 實 際 的 格 式 。 在

HTML模 式 裏 , 這 個 參 數 會 直 接 翻 譯 成 border=...屬 性 , 在 其 他 的 模 式 裏 , 只 有 值 0 ( 無 邊 界 ) , 1 ( 內 部 分 隔 線 ) 和 2 ( 表 框 架 ) 有 意 義 。
expanded (or x)
在 正 常 和 擴 展 格 式 之 間 切 換 。 當 打 開 擴 展 格 式 時 , 所 有 的 輸 出 都 是 兩 列 , 字 段 名 稱 在 左 , 數 據 在 右 。 這 個 模 式 在 數 據 無 法 放 進 通 常 的 "水 平 "模 式 的 屏 幕 時 很 有 用 。 所 有 四 種 輸 出 模 式 都 支 持 擴 展 格 式 。

null 第 二 個 參 數 是 一 個 字 串 , 用 以 代 表 字 段 的 值 爲

null 時 的 打 印 輸

出 。 缺 省 是 什 麼 都 不 打 , 這 樣 很 容 易 和 類 似 一 個 空 字 串 混 淆 。 因 此 , 我 們 可 能 選 擇 \pset null ’(null)’。

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

footer 切 換 默 認 足 標 的 顯 示

(x rows)。

recordsep 聲 明 在 非 對 齊 模 式 時 的 記 錄 分 隔 符 。 缺 省 是 換 行 符 。
tuples_only (或 t)
在 完 全 顯 示 和 只 顯 示 記 錄 之 間 切 換 。 完 全 顯 示 將 顯 示 象 列 頭 , 標 題 和 各 種 腳 註 等 信 息 。 只 顯 示 記 錄 模 式 將 只 顯 示 實 際 的 表 數 據 。
title [
text ] 爲 任 何 隨 後 打 印 的 表 設 置 標 題 。 這 個 參 數 可 以 用 於 給 你 的 輸 出 一 個 描 述 性 標 記 。 如 果 不 帶 參 數 , 重 置 標 題 。
tableattr (or T) [
text ] 允 許 你 聲 明 放 在 HTML table 標 記 裏 的 任 何 屬 性 。 例 如 , 可 以 是 cellpadding 或 bgcolor。 注 意 你 可 能 不 需 要 在 這 裏 聲 明 border , 因 爲 已 經 在 \pset border 裏 用 過 了 。

pager 控 制 查 詢 和

psql幫 助 輸 出 的 分 頁 器 。 如 果 設 置 了 環 境 變 量

PAGER, 輸 出 被 定 向 到 指 定 程 序 , 否 則 使 用 系 統 缺 省 ( 比 如 more) 。 如 果 關 閉 了 分 頁 器 , 則 不 使 用 它 , 如 果 打 開 了 , 程 序 只 在 需 要 的 時 候 使 用 分 頁 器 , 也 就 是 說 , 輸 出 是 到 終 端 , 而 且 那 個 表 很 可 能 無 法 與 屏 幕 匹 配 。 ( psql 在 決 定 何 時 分 頁 時 不 是 很 完 美 。 ) \pset pager 開 關 分 頁 器 。 我 們 也 可 以 把 分 頁 器 設 置 爲 always, 導 致 我 們 在 任 何 情 況 下 都 使 用 分 頁 器 。 可 以 在 "Examples 例 子 " 節 看 到 這 些 不 同 格 式 輸 出 的 示 例 。

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

Note: 注 意 : 無 參 數 運 行 \pset 是 錯 誤 的 。 以 後 這 樣 調 用 將 顯 示 當 前 打 印 選 項 狀 態 。

\q 退 出

psql 程 序 。

\qechotext [ ... ] 這 條 命 令 等 效 於 \echo , 區 別 是 所 有 輸 出 將 寫 入 由 \o 設 置 的 輸 出 通 道 。

\r 重 置 ( 清 空 ) 查 詢 緩 衝 區 。

\s [filename ] 將 命 令 行 歷 史 打 印 出 或 是 存 放 到 filename。 如 果 省 略 filename, 歷 史 將 輸 出 到 標 準 輸 出 。 這 個 選 項 只 有 在 psql 配 置 成 使 用 GNU 歷 史 庫 後 才 生 效 。

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

\set [name [value [ ... ]]] 設 置 內 部 變 量 name 爲 value 或 着 如 果 給 出 了 多 於 一 個 值 , 設 置 爲 所 有 這 些 值 的 聯 接 結 果 。 如 果 沒 有 給 出 第 二 個 參 數 , 只 設 變 量 不 設 值 。 要 重 置 一 個 變 量 , 使 用 \unset 命 令 。 有 效 的 變 量 名 可 以 包 含 字 符 , 數 字 和 下 劃 線 。 參 閱 下 面 的 "Variables 變 量 " 獲 取 細 節 。 儘 管 你 可 以 設 置 任 何 變 量 爲 任 意 值 , psql對 一 些 變 量 特 殊 對 待 。 它 們 在 關 於 變 量 的 節 裏 面 有 文 檔 。

Note: 注 意 : 這 條 命 令 是 完 全 和 SQL 命 令 SET [set(7)] 不 一 樣 的 。

\t 切 換 輸 出 的 列

/字 段 名 的 信 息 頭 和 行 記 數 腳 註 。 這 條 命 令 等 效 於 \pset

tuples_only, 提 供 主 要 爲 了 方 便 。

\Ttable_options 允 許 你 在 使 用 HTML輸 出 模 式 時 聲 明 放 在 table 標 記 裏 的 屬 性 。 這 條 命 令 等 效 於 \pset tableattr table_options。
\timing
切 換 每 個 SQL 語 句 使 用 的 時 間 , 單 位 是 毫 秒 。
\w {
filename ||command} 將 當 前 查 詢 緩 衝 區 輸 出 到 文 件 filename 或 者 定 向 到 Unix 命 令 command。

\x 切 換 擴 展 行 格 式 。 等 效 於

\pset expanded。

\z [pattern ] 生 成 一 個 帶 有 訪 問 權 限 列 表 的 數 據 庫 中 所 有 表 的 列 表 。 如 果 給 出 任 何 pattern, 則 被 當 成 一 個 規 則 表 達 式 , 只 顯 示 匹 配 的 表 。 命 令 grant(7)revoke(7) 用 於 設 置 訪 問 權 限 。 參 閱 grant(7) 獲 取 更 多 信 息 。 這 是 \dp( "顯 示 權 限 ") 的 別 名 。
\! [
command ] 返 回 到 一 個 獨 立 的 Unix shell 或 者 執 行 Unix 命 令 command。 參 數 不 會 被 進 一 步 解 釋 , shell 將 看 到 全 部 參 數 。

\? 獲 得 關 於 反 斜 槓 命 令 的 幫 助 信 息 。 各 種

\d 命 令 都 接 受 一 個 pattern 參 數 , 聲 明 要 顯 示 的 對 象 名 字 。 * 表 示 "任 何 字 符 序 列 ", 而 ? 表 示 "任 何 單 個 字 符 "。 ( 這 個 表 示 法 和 Unix 的 shell 文 件 名 模 式 兼 容 。 ) 高 級 用 戶 也 可 以 使 用 正 則 表 達 式 表 示 法 , 比 如 字 符 表 , [0-9] 這 樣 的 東 西 來 匹 配 "任 意 數 字 "。 要 讓 任 何 這 些 模 式 匹 配 字 符 可 以 安 字 面 方 式 解 析 , 那 就 應 該 用 雙 引 號 包 圍 它 們 。 一 個 包 含 ( 無 引 號 的 ) 句 點 的 模 式 會 被 解 析 承 一 個 模 式 名 的 模 式 後 面 跟 着 一 個 對 象 名 的 模 式 。 比 如 , \dt foo*.bar* 顯 示 所 有 以 foo 開 頭 的 模 式 裏 的 以 bar 開 頭 的 表 名 字 。 如 果 沒 有 出 現 句 點 , 那 麼 這 個 模 式 只 匹 配 在 當 前 模 式 搜 索 路 徑 中 可 見 的 對 象 。 如 果 完 全 省 略 pattern 參 數 , 那 麼 \d 命 令 顯 示 所 有 在 當 前 模 式 搜 索 路 徑 中 可 見 的 對 象 。 要 查 閱 在 數 據 庫 中 的 所 有 對 象 , 使 用 模 式 *.*。

ADVANCED FEATURES 高 級 特 性
VARIABLES 變 量
psql
提 供 類 似 通 常 Unix 命 令 shell 那 樣 的 變 量 替 換 特 性 。 變 量 只 是 簡 單 的 名 稱 /數 值 對 , 這 裏 的 值 可 以 是 任 何 長 度 的 任 何 值 。 要 設 置 一 個 變 量 , 使 用 psql 元 命 令 \set

testdb=>\set foo bar 把 變 量 "foo" 設 置 爲 值 "bar"。 要 檢 索 變 量 的 內 容 , 在 變 量 名 前 面 放 上 冒 號 然 後 把 它 用 在 任 意 斜 槓 命 令 裏 :

testdb=>\echo :foo
bar

Note: 注 意 : \set 的 參 數 服 從 和 其 他 命 令 一 樣 的 替 換 規 則 。 因 此 你 可 以 構 造 有 趣 的 引 用 , 象 \set :foo ’something’ 這 樣 , 獲 得 分 別 象 Perl或 PHP那 樣 有 名 的 "軟 連 接 ( soft links) "或 "變 量 變 量 "。 不 幸 的 是 ( 或 者 萬 幸 的 ? ) , 用 這 些 構 造 不 能 做 任 何 有 用 的 事 情 。 另 一 方 面 , \set bar :foo 是 一 個 非 常 有 效 的 拷 貝 變 量 的 方 法 。 如 果 你 不 帶 第 二 個 參 數 調 用 \set, 那 麼 只 是 設 置 這 個 變 量 而 沒 有 值 。 要 重 置 ( 或 刪 除 ) 一 個 變 量 , 使 用 命 令 \unset

psql 的 內 部 變 量 可 以 包 括 任 意 順 序 , 任 意 數 量 的 字 母 , 數 字 和 下 劃 線 。 有 一 些 常 用 變 量 被 psql 另 眼 相 待 。 它 們 是 一 些 選 項 設 置 , 這 些 選 項 在 運 行 時 可 以 通 過 改 變 變 量 的 值 或 者 改 變 一 些 應 用 的 表 現 狀 態 而 改 變 。 儘 管 你 可 以 把 這 些 變 量 用 於 其 他 用 途 , 但 是 我 們 不 鼓 勵 這 麼 做 , 因 爲 程 序 的 特 性 可 能 會 很 快 變 得 非 常 奇 怪 。 通 常 , 所 有 特 殊 對 待 的 變 量 都 是 由 大 寫 字 母 組 成 ( 可 能 還 有 數 字 和 下 劃 線 ) 。 爲 了 保 證 和 未 來 的 最 大 限 度 的 兼 容 性 , 請 避 免 使 用 這 樣 的 變 量 。 下 面 是 一 個 所 有 特 殊 對 待 的 變 量 列 表 。
AUTOCOMMIT
如 果 是 on( 缺 省 ) , 那 麼 每 個 SQL 命 令 都 在 成 功 完 成 後 自 動 提 交 。 要 推 遲 這 種 模 式 下 的 提 交 , 你 必 須 輸 入 一 個 BEGIN 或 者 START TRANSACTION SQL 命 令 。 如 果 是 off 或 者 未 設 置 , SQL 命 令 不 會 提 交 , 知 道 你 明 確 地 發 出 COMMIT 或 者 END。 關 閉 自 動 提 交 的 模 式 是 通 過 爲 你 明 確 發 出 一 個 BEGIN 實 現 的 , 它 是 放 在 任 何 尚 未 在 一 個 事 務 塊 中 並 且 自 己 不 是 BEGIN 或 者 其 它 事 務 控 制 命 令 的 前 面 。

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

Note: 注 意 : 自 動 提 交 打 開 方 式 是 PostgreSQL 傳 統 的 行 爲 , 但 是 關 閉 自 動 提 交 更 接 近 SQL 規 範 。 如 果 你 喜 歡 關 閉 自 動 提 交 , 你 應 該 在 你 的 .psqlrc 文 件 裏 設 置 它 。

DBNAME 你 正 在 聯 接 着 的 數 據 庫 名 稱 。 每 次 你 與 一 個 數 據 庫 聯 結 都 會 設 置 這 個 值 ( 包 括 程 序 啓 動 ) , 但 是 可 以 刪 除 。

ECHO 如 果 置 爲

all, 輸 入 的 或 者 來 自 一 個 腳 本 的 所 有 行 在 分 析 或 執 行 前 都 寫 到 標 準 輸 出 。 要 在 程 序 啓 動 時 聲 明 這 些 , 使 用 -a如 果 設 置 爲 queries, psql 只 是 在 查 詢 發 送 給 服 務 器 之 前 打 印 出 來 。 實 現 這 個 功 能 的 命 令 行 選 項 是 -e。
ECHO_HIDDEN
當 設 置 了 這 個 變 量 並 且 一 個 反 斜 槓 命 令 查 詢 數 據 庫 時 , 首 先 顯 示 查 詢 。 這 樣 你 可 以 學 習 PostgreSQL 內 部 的 東 西 並 且 在 你 自 己 的 程 序 裏 提 供 類 似 功 能 。 如 果 你 設 置 該 變 量 的 值 爲 "noexec", 查 詢 只 是 顯 示 出 來 但 是 實 際 上 不 發 送 到 服 務 器 和 執 行 。
ENCODING
當 前 的 客 戶 端 字 符 集 編 碼 。
HISTCONTROL
如 果 這 個 變 量 設 置 爲 ignorespace, 以 空 格 開 始 的 行 將 不 會 進 入 歷 史 列 表 。 如 果 設 置 爲 變 量 ignoredups, 與 以 前 歷 史 記 錄 裏 匹 配 的 行 也 不 會 進 入 歷 史 記 錄 。 值 ignoreboth是 上 面 兩 個 的 結 合 。 如 果 刪 除 此 變 量 或 者 其 值 爲 任 何 與 上 面 的 值 不 同 的 東 西 , 所 有 交 互 模 式 讀 入 的 行 都 被 保 存 入 歷 史 列 表 。

Note: 注 意 : 這 個 特 性 是 無 恥 地 從 bash 裏 剽 竊 來 的 。

HISTSIZE 存 在 命 令 歷 史 裏 的 命 令 的 個 數 。 缺 省 值 是 500。

Note: 注 意 : 這 個 特 性 是 無 恥 地 從 bash 裏 剽 竊 來 的 。

HOST 當 前 你 正 聯 接 的 數 據 庫 服 務 器 主 機 。 這 是 在 每 次 你 與 數 據 庫 聯 接 時 ( 包 括 程 序 啓 動 ) 設 置 的 , 但 是 可 以 刪 除 。

IGNOREEOF 如 果 刪 除 此 變 量 , 向 一 個 交 互 的 psql會 話 發 送 一 個 EOF ( 通 常 是 Control+D) 將 終 止 應 用 。 如 果 設 置 爲 一 個 數 字 值 , 那 麼 在 應 用 終 止 前 該 數 值 的 EOF 字 符 將 被 忽 略 。 如 果 設 置 了 此 變 量 但 是 沒 有 數 字 值 , 缺 省 是 10。

Note: 注 意 : 這 個 特 性 是 無 恥 地 從 bash 裏 剽 竊 來 的 。

LASTOID 最 後 影 響 的 oid值 , 即 爲 從 一 條 INSERT 或 lo_insert 命 令 返 回 的 值 。 此 變 量 只 保 證 在 下 一 條 SQL 命 令 的 結 果 顯 示 之 前 有 效 。
ON_ERROR_STOP
缺 省 時 , 如 果 非 交 互 的 腳 本 碰 到 一 個 錯 誤 , 象 一 條 錯 誤 的 SQL 命 令 或 者 內 部 元 命 令 , 處 理 會 繼 續 進 行 。 這 是 psql 的 傳 統 特 性 , 但 是 有 時 候 我 們 不 太 希 望 這 樣 。 如 果 設 置 了 這 個 變 量 , 腳 本 處 理 將 馬 上 停 止 。 如 果 該 腳 本 是 從 另 外 一 個 腳 本 調 用 的 , 那 個 腳 本 也 會 按 同 樣 的 方 式 停 止 。 如 果 最 外 層 的 腳 本 不 是 從 一 次 交 互 的 psql 會 話 中 調 用 的 而 是 用 -f 選 項 調 用 的 , psql 將 返 回 錯 誤 代 碼 3, 以 示 這 個 情 況 與 致 命 錯 誤 條 件 的 區 別 ( 錯 誤 代 碼 1) 。

PORT 當 前 你 正 在 聯 接 的 數 據 庫 服 務 器 的 端 口 。 這 是 在 每 次 你 與 數 據 庫 聯 接 時 ( 包 括 程 序 啓 動 ) 設 置 的 , 但 是 可 以 刪 除 。

PROMPT1
PROMPT2
PROMPT3
這 些 指 明 psql 顯 示 的 提 示 符 看 上 去 象 什 麼 。 參 閱 下 面 的 "Prompting 提 示 符 "。

QUIET 這 個 變 量 等 效 於 命 令 行 選 項

-q。 可 能 在 交 互 模 式 下 沒 有 什 麼 用 。

SINGLELINE 這 個 變 量 等 效 於 設 置 命 令 行 選 項 -S。 你 可 以 在 運 行 時 刪 除 或 設 置 它 。
SINGLESTEP
這 個 變 量 等 效 於 命 令 行 選 項 -s

USER 當 前 你 正 用 於 聯 接 的 數 據 庫 用 戶 。 這 是 在 每 次 你 與 數 據 庫 聯 接 時 ( 包 括 程 序 啓 動 ) 設 置 的 , 但 是 可 以 刪 除

/重 置 。
VERBOSITY
這 個 選 項 可 以 設 置 爲 值 default, verbose, 或 者 terse 以 控 制 錯 誤 報 告 的 冗 餘 行 。

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

testdb=>\set foo ’my_table’
testdb=>SELECT * FROM :foo; 將 會 查 詢 表 my_table。 變 量 的 值 是 逐 字 拷 貝 的 , 所 以 它 甚 至 可 以 包 含 不 對 稱 的 引 號 或 反 斜 槓 命 令 。 你 必 須 保 證 你 輸 入 的 東 西 是 有 意 義 的 。 變 量 替 換 將 不 會 在 引 號 引 起 來 的 SQL 語 句 裏 面 發 生 。 利 用 這 個 功 能 的 一 個 時 髦 的 應 用 是 通 過 使 用 一 個 隨 後 的 語 句 中 最 後 插 入 的 OID 建 立 一 個 外 鍵 仿 真 場 景 。 另 一 個 可 能 用 到 這 個 機 制 的 地 方 是 把 一 個 文 件 的 內 容 拷 貝 到 一 個 字 段 裏 面 去 。 首 先 把 文 件 裝 載 到 一 個 變 量 然 後 象 上 面 那 樣 處 理 。

testdb=>\set content ’\’’ ’cat my_file.txt’ ’\’’
testdb=>INSERT INTO my_table VALUES (:content); 這 樣 處 理 的 一 個 可 能 問 題 是 my_file.txt 可 能 包 含 單 引 號 。 這 些 需 要 被 逃 逸 以 免 在 處 理 第 三 行 時 不 會 導 致 語 法 錯 誤 。 可 以 使 用 程 序 sed 來 做 這 個 處 理 :

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分 析 這 些 時 , 它 將 把 雙 反 斜 槓 替 換 爲 單 個 反 斜 槓 然 後 進 行 替 換 。 可 能 有 時 候 你 認 爲 所 有 Unix 命 令 使 用 同 一 個 逃 逸 字 符 是 個 好 事 。 但 具 有 諷 刺 意 味 的 事 實 是 你 可 能 不 得 不 逃 逸 所 有 反 斜 槓 , 因 爲 SQL 文 本 常 量 同 樣 也 慘 遭 這 種 解 釋 。 這 種 情 況 下 你 可 能 最 好 在 外 部 準 備 文 件 。 因 爲 冒 號 也 可 以 合 法 的 出 現 在 SQL 命 令 裏 , 便 有 下 面 規 則 的 應 用 : 如 果 沒 有 設 置 變 量 , 字 符 序 列 "冒 號 +名 稱 " 不 會 被 改 變 。 在 任 何 情 況 下 你 都 可 以 用 反 斜 槓 逃 逸 冒 號 以 保 護 它 免 於 被 解 釋 。 ( 變 量 的 冒 號 語 法 是 SQL 用 於 嵌 入 查 詢 語 言 的 標 準 , 如 ECPG。 用 於 數 組 片 段 和 類 型 轉 換 的 冒 號 語 法 是 PostgreSQL 擴 展 , 因 此 有 衝 突 。 )

PROMPTING 提 示 符
psql
使 用 的 提 示 符 可 以 根 據 你 的 喜 好 客 戶 化 。 三 個 變 量 PROMPT1, PROMPT2, 和 PROMPT3 包 含 描 述 提 示 符 的 外 觀 的 字 串 和 特 殊 逃 逸 序 列 。 Prompt 1 是 psql 請 求 一 個 新 命 令 時 的 使 用 的 正 常 提 示 符 。 Prompt 2 是 在 一 個 命 令 輸 入 期 待 更 多 輸 入 時 ( 因 爲 查 詢 沒 有 用 一 個 分 號 結 束 或 者 引 號 沒 有 關 閉 ) 顯 示 的 提 示 符 。 Prompt 3 在 你 運 行 一 個 SQL COPY 命 令 和 等 待 你 在 終 端 上 鍵 入 記 錄 時 使 用 。 相 應 的 提 示 符 變 量 的 值 是 按 字 面 打 印 的 , 除 非 碰 到 一 個 百 分 號 ( %) 。 這 時 某 些 其 他 的 文 本 被 替 換 , 替 換 爲 何 物 取 決 於 下 一 個 字 符 。 已 定 義 的 替 換 是 :

%M 數 據 庫 服 務 器 主 機 名 全 名 ( 帶 着 域 名 ) , 如 果 聯 接 是 通 過

Unix 域 套 接

字 進 行 的 就 是 [local], 或 者 如 果 Unix 域 套 接 字 不 是 編 譯 的 缺 省 位 置 , 就 是 [local:/dir/name]。

%m 數 據 庫 服 務 器 的 主 機 名 刪 去 第 一 個 點 後 面 的 部 分 剩 下 的 東 西 。 或 者 如 果 聯 接 是 通 過

Unix 域 套 接 字 , 就 是 [local]。

%> 數 據 庫 服 務 器 正 在 偵 聽 的 端 口 號 。

%n 數 據 庫 會 話 的 用 戶 名 。 ( 這 個 值 的 擴 展 可 能 在 一 個 數 據 庫 會 話 過 程 中 因 爲

SET SESSION AUTHORIZATION 命 令 而 改 變 。 )

%/ 當 前 數 據 庫 名 稱 。

%~ 類 似

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

%# 如 果 會 話 用 戶 是 數 據 庫 超 級 用 戶 , 使 用

"#", 否 則 用 ">"。 ( 這 個 值 的

擴 展 可 能 在 一 個 數 據 庫 會 話 過 程 中 因 爲 SET SESSION AUTHORIZATION 命 令 而 改 變 。 )

%R 對 於

prompt 1 通 常 是 =, 但 是 如 果 是 單 行 模 式 則 是 ^, 而 如 果 會 話 與

數 據 庫 斷 開 ( 如 果

%x 事 務 狀 態 : 如 果 不 在 事 務 塊 裏 , 是 一 個 空 字 串 , 如 果 在 事 務 塊 裏 , 是

*, 如 果 在 一 個 失 敗 的 事 務 塊 裏 是 !, 或 者 無 法 判 斷 事 務 狀 態 時 爲 ? ( 比 如 , 因 爲 沒 有 連 接 ) 。
%
digits 如 果 digits 以 0x 開 頭 , 那 麼 其 餘 字 符 被 解 釋 成 一 個 十 六 進 制 數 字 並 且 替 換 爲 對 應 ( 十 六 進 制 碼 ) 的 字 符 。 如 果 第 一 個 數 字 是 0, 該 字 符 被 解 釋 成 一 個 八 進 制 數 字 並 且 替 換 爲 對 應 的 ( 八 進 制 碼 ) 的 字 符 。 否 則 認 爲 是 一 個 十 進 制 數 字 。
%:
name:

psql變 量 name的 值 。 參 閱 "Variables 變 量 " 節 獲 取 細 節 。

%’command

command的 輸 出 , 類 似 於 通 常 的 反 引 號 ( back-tick) 替 換 。 要 在 提 示 符 裏 插 入 百 分 號 , 鍵 入 %%。 缺 省 提 示 符 等 效 於 ’%/%R%# ’ 用 於 prompts 1 和 2, 以 及 ’>> ’ 用 於 prompt 3。

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

COMMAND-LINE EDITING 命 令 行 編 輯
psql
爲 了 編 輯 和 檢 索 命 令 行 的 方 便 支 持 readline 和 歷 史 庫 。 命 令 歷 史 存 放 在 你 的 家 目 錄 的 一 個 叫 .psql_history 的 文 件 裏 , 並 且 當 psql 啓 動 的 時 候 會 裝 載 進 來 。 還 支 持 Tab 補 齊 , 儘 管 該 補 齊 邏 輯 並 不 是 一 個 SQL 分 析 器 必 備 的 。 如 果 因 某 些 原 因 你 不 喜 歡 tab 補 齊 , 你 可 以 把 下 面 幾 行 放 在 你 的 家 目 錄 的 一 個 叫 .inputrc 的 文 件 裏 關 閉 這 個 特 性 :

$if psql
set disable-completion on
$endif ( 這 不 是 psql 的 特 性 , 是 Readline 的 。 參 考 它 的 文 檔 獲 取 更 多 細 節 。 )

ENVIRONMENT 環 境

HOME 初 始 化 文 件 (

.psqlrc) 和 命 令 歷 史 文 件 ( .psql_history) 的 目 錄 。

PAGER 如 果 查 詢 結 果

在 一 頁 裏 放 不 下 , 那 麼 它 們 被 定 向 到 這 個 命 令 。 典 型 的 值 是 more 或 者 less。 缺 省 的 是 平 臺 相 關 的 。 我 們 可 以 用 \pset 命 令 關 閉 分 頁 器 。

PGDATABASE 缺 省 連 接 的 數 據 庫

PGHOST

PGPORT

PGUSER 缺 省 連 接 參 數

PSQL_EDITOR

EDITOR

VISUAL

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

SHELL

\! 命 令 執 行 的 命 令 。

TMPDIR

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

FILES

• 在 啓 動 之 前 ,

psql 視 圖 讀 取 並 執 行 來 自 文 件 $HOME/.psqlrc 的 命 令 。 它 將

用 於 設 置 客 戶 端 或 者 服 務 器 的 風 格 ( 使 用 \setSET 命 令 ) 。

• 命 令 行 歷 史 存 儲 在

$HOME/.psql_history

NOTES 注 意

• 一 些

psql的 早 期 版 本 允 許 一 個 單 字 母 的 反 斜 槓 命 令 ( 元 命 令 ) 的 第 一 個 參 數

直 接 跟 在 命 令 後 面 , 而 不 用 空 白 間 隔 。 出 於 兼 容 性 原 因 , 這 個 特 性 仍 然 在 某 些 程 度 上 被 支 持 , 但 是 我 不 準 備 在 這 裏 詳 細 解 釋 , 因 爲 我 不 鼓 勵 這 樣 使 用 。 不 過 如 果 你 收 到 莫 名 其 妙 的 信 息 , 想 想 這 個 用 法 。 例 如

testdb=>\foo
Field separator is "oo". 可 能 不 是 你 想 要 的 東 西 。

psql 只 能 與 同 版 本 的 服 務 器 平 穩 地 工 作 。 這 不 意 味 着 其 他 組 合 會 完 全 失 敗 , 但 是 可 能 有 微 小 的 或 者 不 那 麼 微 小 的 問 題 。 如 果 服 務 器 的 版 本 不 同 , 反 斜 槓 命 令 是 特 別 容 易 失 效 的 。

EXAMPLES 例 子

第 一 個 例 子 演 示 瞭 如 何 把 一 個 查 詢 分 成 多 個 行 進 行 輸 入 。 注 意 提 示 符 的 變 化 :

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 命 令 讓 這 個 查 詢 看 起 來 不 一 樣 :

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 [AT] pgsqldb.org>

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh