Manpages

NAME

pg_dump - 将 一 个 PostgreSQL数 据 库 抽 出 到 一 个 脚 本 文 件 或 者 其 它 归 档 文 件 中

SYNOPSIS

pg_dump [ option... ] [ dbname ]

DESCRIPTION 描 述

pg_dump 是 一 个 用 于 备 份 PostgreSQL 数 据 库 的 工 具 。 它 甚 至 可 以 在 数 据 库 正 在 并 发 使 用 的 时 候 进 行 完 整 一 致 的 备 份 。 pg_dump 并 不 阻 塞 其 它 用 户 对 数 据 库 的 访 问 ( 读 或 者 写 ) 。 转 储 格 式 可 以 是 一 个 脚 本 或 者 归 档 文 件 。 这 个 脚 本 文 件 的 格 式 是 纯 文 本 , 它 包 含 许 多 SQL 命 令 , 这 些 SQL 命 令 可 以 用 于 重 建 该 数 据 库 并 将 之 恢 复 到 保 存 成 脚 本 的 时 候 的 状 态 。 要 恢 复 这 些 脚 本 , 使 用 psql(1)。 它 们 甚 至 可 以 用 于 在 其 它 机 器 甚 至 是 其 它 硬 件 体 系 的 机 器 上 重 建 该 数 据 库 , 通 过 对 脚 本 进 行 一 些 修 改 , 甚 至 可 以 在 其 它 SQL 数 据 库 产 品 上 重 建 该 数 据 库 。 另 外 , 还 有 候 选 的 归 档 文 件 格 式 可 以 和 pg_restore(1) 一 起 使 用 重 建 数 据 库 , 并 且 它 们 也 允 许 pg_restore(1) 对 恢 复 什 么 东 西 进 行 选 择 , 或 者 甚 至 是 在 恢 复 之 前 对 需 要 恢 复 的 条 目 进 行 重 新 排 序 。 归 档 文 件 也 是 设 计 成 可 以 跨 平 台 移 植 的 。 如 果 一 种 候 选 文 件 格 式 和 pg_restore(1) 结 合 , 那 么 pg_dump就 能 提 供 一 种 灵 活 的 归 档 和 传 输 机 制 。 pg_dump 可 以 用 于 备 份 整 个 数 据 库 , 然 后 就 可 以 使 用 pg_restore 检 查 这 个 归 档 和 /或 选 择 要 恢 复 的 数 据 库 部 分 。 最 灵 活 等 输 出 文 件 格 式 是 ’’custom(客 户 化 )’’ 格 式 ( -Fc) 。 它 允 许 对 归 档 元 素 进 行 选 取 和 重 新 排 列 , 并 且 缺 省 时 是 压 缩 的 。 tar 格 式 ( -Ft) 不 是 压 缩 的 并 且 我 们 在 装 载 等 时 候 不 可 能 重 排 列 , 不 过 它 也 很 灵 活 ; 还 有 , 它 可 以 用 其 它 工 具 , 比 如 tar 处 理 。 在 运 行 pg_dump 的 时 候 , 我 们 应 该 检 查 输 出 , 看 看 是 否 有 任 何 警 告 存 在 ( 在 标 准 错 误 上 打 印 ) , 特 别 是 下 面 列 出 的 限 制 。

OPTIONS 选 项

下 面 的 命 令 行 参 数 用 于 控 制 输 出 格 式 。

dbname 声 明 将 要 转 储 的 数 据 库 名 。 如 果 没 有 声 明 这 个 参 数 , 那 么 使 用 环 境 变 量

PGDATABASE。 如 果 那 个 环 境 变 量 也 没 声 明 , 那 么 用 发 起 连 接 的 用 户 名 。

-a

--data-only 只 输 出 数 据 , 不 输 出 结 构 ( 表 定 义 ) 。 这 个 选 项 只 是 对 纯 文 本 格 式 有 意 义 。 对 于 其 它 格 式 , 你 可 以 在 调 用 pg_restore 的 时 候 声 明 选 项 。

-b

--blobs 在 转 储 中 包 含 大 对 象 。

-c

--clean 输 出 在 创 建 数 据 库 创 建 命 令 之 前 先 清 理 ( 删 除 ) 该 数 据 库 对 象 的 命 令 。 这 个 选 项 只 是 对 纯 文 本 格 式 有 意 义 。 对 于 其 它 格 式 , 你 可 以 在 调 用 pg_restore 的 时 候 声 明 选 项 。

-C

--create 以 一 条 创 建 该 数 据 库 本 身 并 且 与 这 个 数 据 库 联 接 等 命 令 开 头 进 行 输 出 。 ( 如 果 是 这 种 形 式 的 脚 本 , 那 么 你 在 运 行 脚 本 之 前 和 哪 个 数 据 库 联 接 就 不 重 要 了 。 ) 这 个 选 项 只 对 纯 文 本 格 式 有 意 义 。 对 于 其 它 格 式 , 你 可 以 在 调 用 pg_restore 的 时 候 声 明 该 选 项 。

-d

--inserts 将 数 据 输 出 为 的 INSERT 命 令 ( 而 不 是 COPY) 。 这 样 会 导 致 恢 复 非 常 缓 慢 。 但 却 令 归 档 更 容 易 移 植 到 其 它 SQL 数 据 库 。

-D

--column-inserts
--attribute-inserts
把 数 据 转 储 为 带 有 明 确 字 段 名 的 INSERT 命 令 。 ( INSERT INTO table(column, ...) VALUES ...) 。 这 样 会 导 致 恢 复 非 常 缓 慢 , 但 是 如 果 你 想 重 新 排 列 字 段 的 顺 序 , 那 么 它 是 必 须 的 。
-f
file
--file=
file 把 输 出 发 往 指 定 的 文 件 。 如 果 忽 略 这 些 , 则 使 用 标 准 输 出 。
-F
format
--format=
format 选 择 输 出 的 格 式 。 format可 以 是 下 列 之 一 :

p 输 出 纯 文 本

SQL脚 本 文 件 ( 缺 省 )

t 输 出 适 合 输

入 到 pg_restore 里 的 tar归 档 文 件 。 使 用 这 个 归 档 允 许 在 恢 复 数 据 库 时 重 新 排 序 和 /或 把 表 结 构 排 除 在 外 。 同 时 也 可 能 可 以 在 恢 复 的 时 候 限 制 对 哪 些 数 据 进 行 恢 复 。

c

输 出 适 于 给 pg_restore 用 的 客 户 化 归 档 。 这 是 最 灵 活 的 格 式 , 它 允 许 对 装 载 的 数 据 和 纲 要 元 素 进 行 重 新 排 列 。 这 个 格 式 缺 省 的 时 候 是 压 缩 的 。

-i

--ignore-version 忽 略 在 pg_dump 和 数 据 库 服 务 器 之 间 的 版 本 差 别 。

pg_dump 可 以 处 理 来 自 以 前 版 本 的 PostgreSQL 的 数 据 库 , 但 是 太 老 的 版 本 则 不 被 支 持 了 ( 目 前 是 支 持 到 7.0) 。 如 果 你 需 要 跨 越 版 本 检 查 时 才 使 用 这 个 选 项 ( 而 且 如 pg_dump 失 效 , 别 说 我 没 警 告 你 ) 。

-n namespace
--schema=
schema 只 转 储 schema 的 内 容 。 如 果 没 有 声 明 这 个 选 项 , 所 有 目 标 数 据 库 中 的 非 系 统 模 式 都 会 被 转 储 出 来 。

Note: 注 意 : 在 这 个 模 式 里 , pg_dump 并 不 试 图 转 储 任 何 其 它 选 定 模 式 可 能 依 赖 的 数 据 库 对 象 。 因 此 , 系 统 不 保 证 单 一 的 一 个 模 式 的 转 储 就 可 以 成 功 地 恢 复 到 一 个 干 净 的 数 据 库 中 去 。

-o

--oids 为 每 个 表 都 输 出 对 象 标 识 (

OID) 。 如 果 你 的 应 用 在 某 种 程 度 上 引 用

了 OID字 段 的 话 , ( 比 如 , 在 外 键 约 束 中 用 到 ) 。 那 么 使 用 这 个 选 项 。 否 则 , 不 应 该 使 用 这 个 选 项 。

-O

--no-owner 不 把 对 象 的 所 有 权 设 置 为 对 应 源 数 据 库 。 By default, pg_dump issues SET SESSION AUTHORIZATION statements to set ownership of created schema elements. These statements will fail when the script is run unless it is started by a superuser (or the same user that owns all of the objects in the script). To make a script that can be restored by any user, but will give that user ownership of all the objects, specify -O. 这 个 选 项 只 是 对 纯 文 本 格 式 有 意 义 。 对 于 其 它 格 式 , 在 你 调 用 pg_restore 的 时 候 你 可 以 声 明 该 选 项 。

-R

--no-reconnect 这 个 选 项 已 经 过 时 , 但 是 出 于 向 下 兼 容 的 考 虑 , 仍 然 接 受 这 个 选 项 。

-s

--schema-only 只 输 出 表 纲 要 ( 定 义 ) , 不 输 出 数 据 。
-S
username
--superuser=
username 声 明 关 闭 触 发 器 时 需 要 用 到 的 超 级 用 户 名 。 它 只 有 使 用 了 --disable-triggers 的 时 候 才 有 关 系 。 ( 通 常 , 我 们 最 好 不 要 输 入 这 个 参 数 , 而 是 用 超 级 用 户 启 动 生 成 的 脚 本 。 )
-t
table
--table=
table 只 输 出 表 table 的 数 据 。 很 可 能 是 在 不 同 模 式 里 面 有 多 个 同 名 表 ; 如 果 这 样 , 那 么 所 有 匹 配 的 表 都 将 被 转 储 出 来 。 同 时 声 明 --schema--table 则 只 选 择 一 个 表 。

Note: 注 意 : 在 这 个 模 式 里 , pg_dump 并 不 试 图 转 储 任 何 其 它 选 定 表 可 能 依 赖 的 数 据 库 对 象 。 因 此 , 系 统 不 保 证 单 一 的 一 个 表 的 转 储 就 可 以 成 功 地 恢 复 到 一 个 干 净 的 数 据 库 中 去 。

-v

--verbose 声 明 冗 余 模 式 。 这 样 将 令 pg_dump 在 标 准 错 误 上 打 印 进 度 信 息 。

-x

--no-privileges
--no-acl
避 免 输 出 ACL( 赋 予 /撤 消 命 令 ) 和 表 的 所 有 者 关 系 信 息 。
-X use-set-session-authorization
--use-set-session-authorization
这 个 选 项 废 弃 了 , 保 留 它 是 为 了 向 下 兼 容 。 pg_dump 现 在 表 现 得 总 是 想 正 式 选 取 了 这 个 选 项 一 样 。
-X disable-triggers
--disable-triggers
这 个 选 项 只 是 和 创 建 仅 有 数 据 的 转 储 相 关 。 它 告 诉 pg_dump 包 含 在 恢 复 数 据 时 , 临 时 关 闭 目 标 表 上 面 的 触 发 器 的 命 令 。 如 果 你 在 表 上 有 参 考 完 整 性 检 查 或 者 其 它 触 发 器 , 而 恢 复 数 据 的 时 候 你 不 想 重 载 他 们 , 那 么 你 就 应 该 使 用 这 个 选 项 。 目 前 , 为 --disable-triggers 发 出 的 命 令 必 须 用 超 级 用 户 来 做 。 因 此 , 你 应 该 同 时 用 -S 声 明 一 个 超 级 用 户 名 , 或 者 最 好 是 用 一 个 超 级 用 户 的 身 份 来 启 动 这 个 生 成 的 脚 本 。 这 个 选 项 只 对 纯 文 本 格 式 有 意 义 。 对 于 其 它 格 式 , 你 可 以 在 调 用 pg_restore 的 时 候 声 明 这 个 选 项 。
-Z
0..9
--compress=
0..9 声 明 在 那 些 支 持 压 缩 的 格 式 中 使 用 的 压 缩 级 别 。 ( 目 前 只 有 客 户 化 格 式 支 持 压 缩 ) 。 下 面 的 命 令 行 参 数 控 制 数 据 库 为 联 接 参 数 。
-h
host
--host=
host 声 明 运 行 服 务 器 的 机 器 的 主 机 名 。 如 果 数 值 以 斜 扛 开 头 , 则 它 被 用 做 到 Unix 域 套 接 字 的 路 径 。 缺 省 是 从 PGHOST 环 境 变 量 中 取 得 的 , 如 果 设 置 了 这 个 环 境 变 量 的 话 , 否 则 , 尝 试 一 个 Unix 域 套 接 字 连 接 。
-p
port
--port=
port 声 明 服 务 器 正 在 侦 听 并 等 待 联 接 的 TCP 端 口 或 本 地 Unix 主 控 套 接 字 文 件 句 柄 。 缺 省 时 使 用 环 境 变 量 PGPORT 的 值 ( 如 果 存 在 ) , 或 者 是 编 译 时 的 缺 省 值 。
-U
username 以 给 出 用 户 身 分 联 接 。

-W 强 制 口 令 提 示 。 如 果 服 务 器 需 要 口 令 认 证 , 那 么 这 个 动 作 应 该 自 动 发 生 。

ENVIRONMENT 环 境

PGDATABASE

PGHOST

PGPORT

PGUSER 缺 省 连 接 参 数

DIAGNOSTICS 诊 断

pg_dump 在 内 部 使 用 SELECT 语 句 。 如 果 你 运 行 pg_dump 时 碰 到 问 题 , 确 认 你 能 够 使 用 象 psql(1) 这 样 的 程 序 从 数 据 库 选 取 信 息 。

NOTES 注 意

如 果 你 的 数 据 库 给 template1数 据 库 增 加 了 任 何 你 自 己 的 东 西 , 那 么 请 注 意 把 pg_dump 的 输 出 恢 复 到 一 个 真 正 空 的 数 据 库 中 ; 否 则 你 可 能 会 收 到 因 为 重 复 定 义 所 追 加 的 对 象 而 造 成 的 错 误 信 息 。 要 制 作 一 个 没 有 任 何 本 地 附 属 物 的 数 据 库 , 可 以 从 template0而 不 是 template1拷 贝 , 比 如 :

CREATE DATABASE foo WITH TEMPLATE template0;

pg_dump 有 几 个 限 制 :

• 在 转 储 一 个 表 或 者 作 为 纯 文 本 转 储 时 ,

pg_dump 无 法 操 作 大 对 象 。 大 对 象 必

须 整 数 据 库 地 使 用 非 文 本 归 档 格 式 之 一 进 行 转 储 。

• 在 进 行 纯 数 据 转 储 时 , 并 且 使 用 了 选 项

--disable-triggers 的 时

候 , pg_dump 发 出 一 些 查 询 先 关 闭 在 用 户 表 上 面 的 触 发 器 , 然 后 插 入 数 据 , 数 据 插 入 完 成 后 再 发 出 查 询 打 开 触 发 器 。 如 果 恢 复 动 作 在 中 间 停 止 , 那 么 系 统 表 可 能 就 会 处 于 一 种 错 误 状 态 。

tar 归 档 的 成 员 的 大 小 限 制 于 8 GB。 ( 这 个 限 制 是 tar 文 件 格 式 的 固 有 限 制 。 ) 因 此 这 个 格 式 无 法 用 于 那 些 一 个 表 的 大 小 超 过 这 个 尺 寸 的 原 文 表 现 。 tar 归 档 和 任 何 其 它 输 出 格 式 的 总 大 小 是 不 受 限 制 的 , 只 是 可 能 会 又 操 作 系 统 的 限 制 。 恢 复 完 之 后 , 我 们 建 议 在 每 个 已 恢 复 的 对 象 上 运 行 ANALYZE。 这 样 优 化 器 就 可 以 得 到 有 用 的 统 计 。

EXAMPLES 例 子

转 储 一 个 数 据 库 :

$ pg_dump mydb > db.out 重 载 这 个 数 据 库 :

$ psql -d database -f db.out 输 出 一 个 叫 mydb 的 包 含 BLOB 的 数 据 库 到 一 个 tar 文 件 :

$ pg_dump -Ft -b mydb > db.tar 把 这 个 数 据 库 ( 连 同 BLOB) 一 起 恢 复 到 一 个 现 有 的 叫 newdb 的 数 据 库 :

$ pg_restore -d newdb db.tar

HISTORY 历 史

pg_dump 工 具 最 早 出 现 在 Postgres95 版 本 0.02。 非 纯 文 本 输 出 格 式 在 PostgreSQL 版 本 7.1 时 引 入 。

SEE ALSO 参 见

pg_dumpall(1), pg_restore(1), psql(1)

译 者

Postgresql 中 文 网 站 何 伟 平 <laser [AT] pgsqldb.org>

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh