Man page - psql(1)

Manual

PSQL

NAME
SYNOPSIS
DESCRIPTION 描 述
OPTIONS 選 項
EXIT STATUS 退 出 狀 態
USAGE 用 法
CONNECTING TO A DATABASE 與 一 個 數 據 庫 聯 接
ENTERING SQL COMMANDS 輸 入 SQL 命 令
META-COMMANDS 元 命 令
ADVANCED FEATURES 高 階 特 性
VARIABLES 變 數
SQL INTERPOLATION 代 換
PROMPTING 提 示 符
COMMAND-LINE EDITING 命 令 列 編 輯
ENVIRONMENT 環 境
FILES
NOTES 注 意
EXAMPLES 例 子
譯 者


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

-o filename
--output
filename

將 所 有 查 詢 輸 出 定 向 到 檔 案 filename。 這 個 選 項 等 效 於 命 令 \o

-p port

--port port

宣 告 被 伺 服 器 偵 聽 的 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 選 項 取 代 。

-U username
--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 , \0 digits , 和 \0x digits ( 給 出 的 十 進 位 制 , 八 進 位 制 , 或 十 六 進 位 制 碼 的 字 元 ) 替 換 掉 。

如 果 一 個 不 帶 引 號 的 引 數 以 冒 號 ( :) 開 頭 , 它 會 被 當 作 一 個 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 title title . ( 這 條 命 令 的 名 稱 源 於 "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

\echo text [ ... ]

向 標 準 輸 出 列 印 引 數 , 用 一 個 空 格 分 隔 並 且 最 後 跟 著 一 個 新 行 。 這 個 特 性 在 顯 示 指 令 碼 的 輸 出 時 會 有 用 。 例 如 :

=> \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 獲 取 設 定 其 他 輸 出 選 項 的 內 容 。

\i filename

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

Note: 注 意 : 如 果 你 想 在 螢 幕 上 看 到 讀 入 的 行 , 你 必 須 對 所 有 行 設 定 變 數 ECHO 為 all。

\l (or\list)

列 出 伺 服 器 上 所 有 資 料 庫 的 名 字 和 它 們 的 所 有 者 以 及 字 元 集 編 碼 。 在 命 令 名 稱 後 面 加 一 個 "+" 還 可 以 看 到 對 資 料 庫 的 描 述 。

\lo_export loidfilename

從 資 料 庫 裡 讀 取 OID 為 loid 的 大 物 件 並 把 她 寫 到 filename裡 。 注 意 這 個 功 能 與 伺 服 器 函 式 lo_export 有 些 微 小 的 區 別 , lo_export 執 行 時 帶 著 執 行 資 料 庫 伺 服 器 的 使 用 者 許 可 權 , 而 且 是 在 伺 服 器 的 檔 案 系 統 上 。

Tip: 提 示 : 使 用 \lo_list 檢 視 大 物 件 的 OID。 OID.

\lo_import filename [ 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

列 印 當 前 查 詢 緩 衝 區 到 標 準 輸 出 。

\pset parameter [ 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 程 式 。

\qecho text [ ... ]

這 條 命 令 等 效 於 \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, 提 供 主 要 為 了 方 便 。

\T table_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 的 命 令 。 它 將 用 於 設 定 客 戶 端 或 者 伺 服 器 的 風 格 ( 使 用 \set SET 命 令 ) 。

命 令 列 歷 史 儲 存 在 $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@pgsqldb.org>

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