pg_dumpall

Name

pg_dumpall -- 抽出一個 PostgreSQL 資料庫集群到腳本文件中

Synopsis

pg_dumpall [option...]

描述

pg_dumpall 是一個用於寫出("轉儲")一個資料庫集群裡的所有PostgreSQL資料庫到一個腳本文件的工具。 該腳本文件包含可以用於作為 psql 的輸入恢復資料庫的SQL命令。 它透過對資料庫集群裡的每個資料庫調用 pg_dump 實現這個功能。 pg_dumpall 還轉儲出所有資料庫公用的全局對象。 (pg_dump 並不保存這些對象。) 這些訊息目前包括資料庫用戶和組,以及適用於整個資料庫的訪問權限。

因此,pg_dumpall 是備份您的資料庫的一體化解決方案。 但是請注意它的局限性:它無法轉儲"大對像",因為 pg_dump 無法把這樣的對象轉儲到純文本文件中。如果您的資料庫裡有大對象, 那麼您應該使用 pg_dump 的非文本輸出格式之一轉儲它們。

因為 pg_dumpall 從所有資料庫中讀取資料表, 所以您很可能需要以資料庫超級用戶的身份連線,這樣才能生成完整的轉儲。 同樣,您也需要超級用戶的權限執行保存下來的腳本,這些才能增加用戶和組, 以及建立資料庫。

SQL腳本將寫出到標準輸出。您應該使用合適的 shell 操作符把它重定向到文件。

pg_dumpall 需要和 PostgreSQL 伺服器連接多次(每個資料庫一次)。如果您使用指令認證,可能每次都問您指令。 這種情況下寫一個 ~/.pgpass 可能會比較方便。 參閱 Section 27.12 獲取更多訊息。

選項

下列命令行參數控制輸出格式:

-a
--data-only

只轉儲資料,不轉儲模式(資料定義)。

-c
--clean

包括那些重建之前清理(刪除)資料庫對象的SQL命令。

-d
--inserts

把資料當作 INSERT 命令輸出(而不是 COPY)。這樣將令恢復過程非常緩慢, 這主要是用於讓轉儲輸出可以用於其它非 PostgreSQL 資料庫。 請注意,如果您重新排列了字串順序,那麼恢復可能失敗。 -D 選項更安全,也更慢。

-D
--column-inserts
--attribute-inserts

把資料以帶著明確字串名(INSERT INTO table (column, ...) VALUES ...)的 INSERT 命令形式轉儲出來。 這樣會令恢復非常慢,這主要是用於讓轉儲輸出可以用於其它非 PostgreSQL 資料庫。

-g, --globals-only

只轉儲全局對像(用戶和組),而不轉儲資料庫。

-i
--ignore-version

忽略 pg_dumpall 和資料庫伺服器之間的版本差別。

pg_dumpall 可以處理來自以前版本的 PostgreSQL 的資料庫,但是太老的資料庫就不再支援了(目前到 7.0)。 如果您需要覆蓋版本檢查,那麼可以使用這個選項(如果 pg_dumpall 失敗了,可別說我們沒警告您。)

-o
--oids

做為每個資料表的資料的一部分轉儲對像標識符(OID)。 如果您的應用以某種方式引用了 OID 字串(比如,在外鍵約束裡),那麼使用這個選項。 否則,不應該使用這個選項。

-O
--no-owner

不輸出那些設置對象的所有權,使之匹配原始資料庫的命令。 預設時,pg_dumpall 發出 ALTER OWNER 或者 SET SESSION AUTHORIZATION 這樣的設置建立模式元素的語句。 除非由超級用戶執行這些語句(或者擁有腳本中所有這些對象的同一個用戶)),否則這些語句會失效。 要讓一個腳本可以被任何用戶恢復,就得聲明 -O,不過這樣依賴所有對象的所有者都成了這個用戶。

-s
--schema-only

只轉儲模式(資料定義),不轉儲資料。

-S username
--superuser=username

聲明在關閉觸發器的時候使用的超級用戶名。只有在使用了 --disable-triggers 的時候,這個才相關。 (通常,最好不要使用這個選項,而是以超級用戶身份啟動結果腳本。)

-v
--verbose

聲明冗余模式。這樣將令 pg_dumpall 在轉儲文件中輸出啟動/停止時間,向標準錯誤打印進度訊息。它也會打開 pg_dump 裡面的冗余輸出。

-x
--no-privileges
--no-acl

避免轉儲訪問權限(授權/撤銷命令)。

-X disable-dollar-quoting
--disable-dollar-quoting

這個選項關閉函數體的美元符號的使用,強制他們使用 SQL 標準的引號語法。

-X disable-triggers
--disable-triggers

這個選項只在建立僅有資料的轉儲的時候有用。它指示 pg_dumpall 包含在恢復資料的時候, 在目標資料表上臨時關閉觸發器的命令。如果在您的資料表上有參考完整檢查或者其它您在資料恢復的時候不想調用的觸發器, 那麼請使用這個選項。

目前,為 --disable-triggers 發出的命令必須由超級用戶完成。 因此,您還應該用 -S 聲明一個超級用戶名,或者最好是用超級用戶身份來啟動腳本。

-X use-set-session-authorization
--use-set-session-authorization

這個選項已經廢棄了,不過為了和 pg_dump 兼容,仍然保留。 輸出標準的 SQL SET SESSION AUTHORIZATION 命令而不似乎 OWNER TO 命令。 這樣令轉儲更加符合標準,但是如果轉儲文件中的對象的歷史有些問題,那麼可能不能正確恢復。

下面的命令行參數控制資料庫連接參數。

-h host

聲明資料庫伺服器所執行的機器的主機名。 如果數值以斜槓開頭,那麼就把它用做 Unix 域套接字的目錄。 預設是從 PGHOST 環境變量裡拿來的(如果設置了), 否則使用 Unix 域套接字。

-p port

聲明伺服器監聽的 TCP 連接埠號或者 Unix 域套接字文件擴展。 預設是 PGPORT 環境變量(如果設置了), 或者是編譯時的預設。

-U username

以給定用戶身份連線。

-W

強制指令提示。如果伺服器需要指令認證,那麼這個動作應該自動發生。

環境

PGHOST
PGPORT
PGUSER

預設連接參數。

注意

因為 pg_dumpall 內部調用 pg_dump,所以,一些診斷訊息 可以參考 pg_dump

恢復完之後,我們建議在每個已恢復的對象上執行 ANALYZE。 這樣優化器就可以得到有用的統計。 您也可以用 vacuumdb -a -z 清理所有資料庫。

例子

轉儲所有資料庫:

$ pg_dumpall > db.out

重載這個資料庫,

$ psql -f db.out template1

(在這裡您和哪個資料庫連線並不重要,因為 pg_dumpall 建立的腳本文件將包含合適的命令用於建立和連線保存的資料庫。)

又見

pg_dump, 看看那裡獲取可能的錯誤條件的詳細訊息。