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