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