Manpages

NAME

pg_restore - 从 一 个 由 pg_dump 创 建 的 备 份 文 件 中 恢 复 PostgreSQL 数 据 库 。

SYNOPSIS

pg_restore [ option... ] [ filename ]

DESCRIPTION 描 述

pg_restore 是 一 种 用 于 恢 复 由 pg_dump(1) 创 建 的 任 何 非 纯 文 本 输 出 格 式 中 的 PostgreSQL 数 据 库 的 应 用 。 它 将 发 出 必 要 的 命 令 来 重 新 构 造 数 据 库 , 以 便 于 把 它 恢 复 成 保 存 它 的 时 候 的 样 子 。 归 档 ( 备 份 ) 文 件 还 允 许 pg_restore 有 选 择 地 进 行 恢 复 , 甚 至 在 恢 复 前 重 新 排 列 条 目 的 顺 序 。 归 档 的 文 件 设 计 成 可 以 在 不 同 的 硬 件 体 系 之 间 移 植 。

pg_restore 可 以 以 两 种 模 式 操 作 : 如 果 声 明 了 数 据 库 名 字 , 那 么 归 档 是 直 接 恢 复 到 数 据 库 里 。 大 对 象 只 能 用 直 接 数 据 库 联 接 进 行 恢 复 。 否 则 , 先 创 建 一 个 包 含 重 建 数 据 库 所 必 须 的 SQL 命 令 的 脚 本 ( 并 且 写 入 到 一 个 文 件 或 者 标 准 输 出 ) , 类 似 pg_dump 输 出 纯 文 本 格 式 的 时 候 创 建 的 那 种 脚 本 。 因 此 , 一 些 控 制 脚 本 输 出 的 选 项 就 是 摹 拟 pg_dump 的 操 作 。 显 然 , pg_restore 无 法 恢 复 那 些 不 存 在 归 档 文 件 中 的 信 息 ; 比 如 , 如 果 归 档 是 用 "把 数 据 转 储 为 INSERT命 令 "选 项 制 作 的 , 那 么 pg_restore 将 不 能 使 用 COPY 语 句 装 载 数 据 。

OPTIONS 选 项

pg_restore 接 受 下 列 命 令 行 参 数 。
filename
声 明 要 恢 复 的 备 份 文 件 的 位 置 。 如 果 没 有 声 明 , 则 使 用 标 准 输 入 。

-a

--data-only 只 恢 复 数 据 , 而 不 恢 复 表 模 式 ( 数 据 定 义 ) 。

-c

--clean 创 建 数 据 库 对 象 前 先 清 理 ( 删 除 ) 它 们 。

-C

--create 在 恢 复 数 据 库 之 前 先 创 建 它 。 ( 如 果 出 现 了 这 个 选 项 , 和 -d 在 一 起 的 数 据 库 名 只 是 用 于 发 出 最 初 的 CREATE DATABASE 命 令 。 所 有 数 据 都 恢 复 到 名 字 出 现 在 归 档 中 的 数 据 库 中 去 。 )
-d
dbname
--dbname=
dbname 与 数 据 库 dbname 联 接 并 且 直 接 恢 复 到 该 数 据 库 中 。
-f
filename
--file=
filename 声 明 生 成 的 脚 本 的 输 出 文 件 , 或 者 出 现 -l 选 项 时 用 于 列 表 的 文 件 , 缺 省 是 标 准 输 出 。
-F
format
--format=
format 声 明 备 份 文 件 的 格 式 。 因 为 pg_restore 会 自 动 判 断 格 式 , 所 以 如 果 声 明 了 , 它 可 以 是 下 面 之 一 :

t 备 份 是 一 个

tar 归 档 。 使 用 这 个 格 式 允 许 在 恢 复 数 据 库 的 时 候

重 新 排 序 和 /或 把 表 模 式 元 素 排 除 出 去 。 同 时 还 可 能 在 恢 复 的 时 候 限 制 装 载 的 数 据 。

c 备 份 的 格 式 是 来 自

pg_dump 的 客 户 化 格 式 。 这 是 最 灵 活 的 格

式 , 因 为 它 允 许 重 新 对 数 据 排 序 , 也 允 许 重 载 表 模 式 元 素 。 缺 省 时 这 个 格 式 是 压 缩 的 。

-i

--ignore-version 忽 略 数 据 库 版 本 检 查 。
-I
index
--index=
index 只 恢 复 命 名 的 索 引 。

-l

--list 列 出 备 份 的 内 容 。 这 个 操 作 的 输 出 可 以 用

-L 选 项 限 制 和 重 排 所 恢 复 的

项 目 。

-L list-file
--use-list=
list-file 只 恢 复 在 list-file 里 面 的 元 素 , 以 它 们 在 文 件 中 出 现 的 顺 序 。 你 可 以 移 动 各 个 行 并 且 也 可 以 通 过 在 行 开 头 放 ’;’ 的 方 式 注 释 。 ( 见 下 文 获 取 例 子 。 )

-N

--orig-order 以 最 初 在 pg_dump 里 生 成 的 转 储 顺 序 恢 复 项 目 。 这 个 选 项 没 有 什 么 实 际 的 用 途 , 因 为 pg_dump 会 以 自 己 方 便 的 顺 序 生 成 项 , 这 个 顺 序 不 可 能 是 恢 复 这 些 数 据 的 安 全 顺 序 。 ( 这 个 顺 序 不 是 项 最 后 在 归 档 的 内 容 列 表 中 列 出 的 顺 序 。 ) 又 见 -r。

-o

--oid-order 以 OID 顺 序 恢 复 项 目 。 这 个 选 项 用 处 很 小 , 因 为 OID 只 是 最 初 创 建 顺 序 的 一 个 近 似 指 示 。 如 果 还 声 明 了 -N, 那 么 这 个 选 项 还 覆 盖 它 。 又 见 -r。

-O

--no-owner 不 要 输 出 设 置 对 象 的 权 限 , 以 便 与 最 初 的 数 据 库 匹 配 的 命 令 。 缺 省 时 , pg_restore 发 出 SET SESSION AUTHORIZATION 语 句 设 置 创 建 出 来 的 模 式 元 素 的 所 有 者 权 限 。 如 果 最 初 的 数 据 库 连 接 不 是 由 超 级 用 户 ( 或 者 是 拥 有 所 有 创 建 出 来 的 对 象 的 同 一 个 用 户 ) 发 起 的 , 那 么 这 些 语 句 将 失 败 。 使 用 -O, 那 么 任 何 用 户 都 可 以 用 于 初 始 的 连 接 , 并 且 这 个 用 户 将 拥 有 所 有 创 建 出 来 的 对 象 。
-P
function-name(argtype [, ...])
--function=
function-name(argtype [, ...]) 只 恢 复 指 定 的 命 名 函 数 。 请 注 意 仔 细 拼 写 函 数 名 及 其 参 数 , 应 该 和 转 储 的 内 容 列 表 中 的 完 全 一 样 。

-r

--rearrange 以 对 象 类 型 重 排 项 目 ( 这 个 发 生 在 以 -N 或 者 -o 排 序 之 后 ) 。 重 排 是 为 了 给 出 最 大 可 能 的 性 能 。 如 果 没 有 -N, -o, 和 -r, 那 么 pg_restore 以 项 目 出 现 在 归 档 的 内 容 列 表 中 的 顺 序 恢 复 他 们 , 或 者 按 照 他 们 在 list-file 里 面 的 顺 序 恢 复 他 们 — 假 如 给 出 了 -L 的 话 。 -o 和 -r 的 组 合 复 制 了 pg_dump 在 创 建 归 档 的 内 容 列 表 之 前 进 行 的 排 序 , 因 此 , 这 个 选 项 通 常 没 必 要 声 明 。

-R

--no-reconnect 这 个 选 项 已 经 废 弃 了 , 但 是 为 了 保 持 向 下 兼 容 仍 然 接 受 。

-s

--schema-only 只 恢 复 表 结 构 ( 数 据 定 义 ) 。 不 恢 复 数 据 , 序 列 值 将 重 置 。
-S
username
--superuser=
username 设 置 关 闭 触 发 器 时 声 明 超 级 用 户 的 用 户 名 。 只 有 在 设 置 了 --disable-triggers 的 时 候 才 有 用 。
-t
table
--table=
table 只 恢 复 表 指 定 的 表 的 定 义 和 /或 数 据 。
-T
trigger
--trigger=
trigger 只 恢 复 指 定 的 触 发 器 。

-v

--verbose 声 明 冗 余 模 式 。

-x

--no-privileges
--no-acl
避 免 ACL 的 恢 复 ( grant/revoke 命 令 ) 。
-X use-set-session-authorization
--use-set-session-authorization
这 个 选 项 已 经 废 弃 了 , 但 是 出 于 向 下 兼 容 , 仍 然 接 受 。 pg_restore 现 在 总 是 表 现 得 像 以 前 选 中 这 个 选 项 一 样 。
-X disable-triggers
--disable-triggers
这 个 选 项 只 有 在 执 行 仅 恢 复 数 据 的 时 候 才 相 关 。 它 告 诉 pg_restore 在 装 载 数 据 的 时 候 执 行 一 些 命 令 临 时 关 闭 在 目 标 表 上 的 触 发 器 。 如 果 你 在 表 上 有 完 整 性 检 查 或 者 其 它 触 发 器 , 而 你 又 不 希 望 在 装 载 数 据 的 时 候 激 活 它 们 , 那 么 可 以 使 用 这 个 选 项 。 目 前 , 为 --disable-triggers 发 出 的 命 令 必 须 以 超 级 用 户 发 出 。 因 此 , 你 应 该 也 要 用 -S 声 明 一 个 超 级 用 户 名 , 或 者 更 好 是 设 置 --use-set-session-authorization 并 且 以 PostgreSQL 超 级 用 户 身 份 运 行 pg_restore。

pg_restore 还 接 受 下 面 的 命 令 行 参 数 做 为 联 接 参 数 :
-h
host
--host=
host 声 明 服 务 器 运 行 的 机 器 的 主 机 名 。 如 果 数 值 以 斜 扛 开 头 , 那 么 它 被 用 做 Unix 域 套 接 字 的 目 录 。 缺 省 是 从 PGHOST 环 境 变 量 中 获 取 的 ( 如 果 设 置 了 ) , 否 则 将 尝 试 进 行 Unix 域 套 接 字 。
-p
port
--port=
port 声 明 服 务 器 侦 听 的 TCP 端 口 或 者 本 地 的 Unix 域 套 接 字 文 件 扩 展 。 缺 省 是 环 境 变 量 PGPORT 的 值 ( 如 果 设 置 了 的 话 ) , 否 则 就 说 编 译 的 缺 省 。
-U
username 以 给 出 用 户 身 分 联 接 。

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

ENVIRONMENT 环 境

PGHOST

PGPORT

PGUSER 缺 省 连 接 参 数 。

DIAGNOSTICS 诊 断

当 使 用 -d选 项 声 明 了 直 接 数 据 库 联 接 时 , pg_restore 在 内 部 执 行 SQL 语 句 。 如 果 你 运 行 pg_restore 出 了 毛 病 , 请 确 保 你 能 用 类 似 psql(1) 这 样 的 东 西 从 数 据 库 中 选 取 信 息 。

NOTES 注 意

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

CREATE DATABASE foo WITH TEMPLATE template0;

pg_restore 的 局 限 在 下 面 列 出 。

• 当 向 一 个 已 经 存 在 的 表 恢 复 数 据 , 并 且 还 使 用 了

--disable-triggers 选 项

时 , pg_restore 在 插 入 数 据 前 放 出 一 些 查 询 关 闭 用 户 表 上 的 触 发 器 , 在 数 据 插 入 完 成 后 重 新 打 开 它 们 。 如 果 恢 复 的 中 途 停 止 , 那 么 系 统 表 可 能 处 于 错 误 状 态 。

pg_restore 将 不 会 为 单 一 的 表 恢 复 大 对 象 。 如 果 一 个 归 档 包 含 大 对 象 , 那 么 所 有 大 对 象 都 将 被 恢 复 。 又 见 参 阅 pg_dump(1) 的 文 挡 获 取 有 关 pg_dump 的 局 限 的 细 节 。 一 旦 完 成 恢 复 , 最 好 在 每 个 恢 复 的 对 象 上 运 行 ANALYZE, 以 便 给 优 化 器 有 用 的

统 计 。

EXAMPLES 例 子

把 一 个 包 含 大 对 象 的 叫 mydb 的 数 据 库 转 储 到 一 个 tar文 件 :

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

$ pg_restore -d newdb db.tar 要 对 项 目 重 新 排 序 , 首 先 必 须 转 储 归 档 的 目 录 :

$ pg_restore -l archive.file > archive.list 这 个 文 件 由 一 行 头 和 每 个 项 目 一 行 组 成 , 比 如 。 ; ;
Archive created at Fri Jul 28 22:28:36 2000 ;
dbname: birds ;
TOC Entries: 74 ;
Compression: 0 ;
Dump Version: 1.4-0 ;
Format: CUSTOM ; ; ;
Selected TOC Entries: ;
2; 145344 TABLE species postgres
3; 145344 ACL species
4; 145359 TABLE nt_header postgres
5; 145359 ACL nt_header
6; 145402 TABLE species_records postgres
7; 145402 ACL species_records
8; 145416 TABLE ss_old postgres
9; 145416 ACL ss_old
10; 145433 TABLE map_resolutions postgres
11; 145433 ACL map_resolutions
12; 145443 TABLE hs_old postgres
13; 145443 ACL hs_old 这 里 分 号 是 注 释 分 隔 符 , 而 行 开 头 的 数 字 代 表 赋 给 每 个 项 目 的 内 部 归 档 ID。 文 件 内 的 行 可 以 注 释 掉 , 删 除 和 /或 重 新 排 列 。 比 如 ,

10; 145433 TABLE map_resolutions postgres ;
2; 145344 TABLE species postgres ;
4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres ;
8; 145416 TABLE ss_old postgres 可 以 用 做 pg_restore 的 输 入 并 且 只 会 恢 复 项 目 10 和 6, ( 以 这 个 顺 序 ) :

$ pg_restore -L archive.list archive.file

HISTORY 历 史

pg_restore 工 具 第 一 次 出 现 在 PostgreSQL 7.1。

SEE ALSO 参 见

pg_dump(1), pg_dumpall(1), psql(1)

译 者

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

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