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