支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

pg_dumpall

pg_dumpall — 將 PostgreSQL 資料庫叢集匯出到一個指令檔

概要

pg_dumpall [connection-option...] [option...]

描述

pg_dumpall 是一個工具程式,用於將叢集中所有 PostgreSQL 資料庫寫出(傾印)到一個指令檔中。該指令檔包含SQL指令,可以作為 psql 的輸入來還原資料庫。它透過對叢集中的每個資料庫呼叫 pg_dump 來實現此目的。pg_dumpall 還會匯出所有資料庫共有的全域物件,即資料庫角色、表格空間和組態參數的權限授予。(pg_dump 不會儲存這些物件。)

由於 pg_dumpall 從所有資料庫讀取表格,因此您很可能需要以資料庫超級使用者身分連線,才能產生完整的匯出。此外,您還需要超級使用者權限才能執行儲存的指令檔,才能被允許新增角色和建立資料庫。

SQL 指令檔將寫入標準輸出。使用 -f/--file 選項或 shell 運算子將其重新導向到檔案中。

pg_dumpall 需要多次連線到 PostgreSQL 伺服器(每個資料庫一次)。如果您使用密碼驗證,它每次都會要求輸入密碼。在這種情況下,擁有 ~/.pgpass 檔案會很方便。請參閱 第 32.16 節 以取得更多資訊。

選項

以下命令列選項控制輸出的內容和格式。

-a
--data-only

僅匯出資料,不匯出結構描述(資料定義)。

-c
--clean

發出 SQL 指令以在重新建立之前 DROP 所有已匯出的資料庫、角色和表格空間。當還原是要覆寫現有叢集時,此選項很有用。如果任何物件不存在於目標叢集中,則在還原期間將報告可忽略的錯誤訊息,除非也指定了 --if-exists

-E encoding
--encoding=encoding

以指定的字元集編碼建立匯出。預設情況下,匯出以資料庫編碼建立。(獲得相同結果的另一種方法是將 PGCLIENTENCODING 環境變數設定為所需的匯出編碼。)

-f filename
--file=filename

將輸出傳送到指定的檔案。如果省略此選項,則使用標準輸出。

--filter=filename

指定一個檔案名稱,從中讀取要從匯出中排除的資料庫的模式。這些模式的解譯方式與 --exclude-database 相同。若要從 STDIN 讀取,請使用 - 作為檔案名稱。可以結合 --exclude-database 來指定 --filter 選項以排除資料庫,並且可以多次指定以用於多個篩選檔案。

該檔案列出每列一個資料庫模式,格式如下

exclude database PATTERN

# 開頭的行被視為註解並被忽略。註解也可以放在物件模式列之後。空白行也會被忽略。請參閱 模式 以了解如何在模式中執行引號。

-g
--globals-only

僅匯出全域物件(角色和表格空間),不匯出資料庫。

-O
--no-owner

不要輸出將物件的所有權設定為與原始資料庫相符的指令。預設情況下,pg_dumpall 發出 ALTER OWNERSET SESSION AUTHORIZATION 陳述式,以設定建立的結構描述元素的所有權。除非指令檔由超級使用者(或與擁有指令檔中所有物件的使用者相同的使用者)啟動,否則這些陳述式將在執行指令檔時失敗。若要建立可以由任何使用者還原,但會讓該使用者擁有所有物件的指令檔,請指定 -O

-r
--roles-only

僅匯出角色,不匯出資料庫或表格空間。

-s
--schema-only

只傾印物件定義(綱要),不傾印資料。

-S username
--superuser=username

指定停用觸發程序時要使用的超級使用者名稱。 只有在使用 --disable-triggers 時才相關。(通常,最好省略此選項,而是以超級使用者身分啟動產生的腳本。)

-t
--tablespaces-only

僅傾印表空間,不傾印資料庫或角色。

-v
--verbose

指定詳細模式。 這會使 pg_dumpall 將開始/停止時間輸出到傾印檔案,並將進度訊息輸出到標準錯誤。 重複此選項會使額外的除錯層級訊息出現在標準錯誤上。 此選項也會傳遞到 pg_dump

-V
--version

列印 pg_dumpall 版本並結束。

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

防止傾印存取權限(grant/revoke 指令)。

--binary-upgrade

此選項供就地升級工具使用。 不建議或支援將其用於其他目的。 此選項的行為可能會在未來的版本中更改,恕不另行通知。

--column-inserts
--attribute-inserts

將資料傾印為具有明確欄位名稱的 INSERT 指令 (INSERT INTO table (column, ...) VALUES ...)。 這會使還原速度非常慢; 它主要用於製作可以載入到非 PostgreSQL 資料庫中的傾印。

--disable-dollar-quoting

此選項會停用對函數主體使用美元符號引號,並強制使用 SQL 標準字串語法來引號它們。

--disable-triggers

此選項僅在建立僅資料傾印時相關。 它指示 pg_dumpall 包含在還原資料時暫時停用目標資料表上的觸發程序的指令。 如果您的資料表上有參考完整性檢查或其他觸發程序,而您不希望在資料還原期間調用它們,請使用此選項。

目前,為 --disable-triggers 發出的指令必須以超級使用者身分執行。 因此,您也應該使用 -S 指定超級使用者名稱,或最好小心以超級使用者身分啟動產生的腳本。

--exclude-database=pattern

不要傾印名稱與 pattern 匹配的資料庫。 可以透過編寫多個 --exclude-database 交換器來排除多個模式。 pattern 參數被解釋為一個模式,其規則與 psql\d 指令使用的規則相同(請參閱 模式),因此也可以透過在模式中編寫萬用字元來排除多個資料庫。 使用萬用字元時,請小心引用模式,以防止 shell 萬用字元擴充。

--extra-float-digits=ndigits

傾印浮點資料時,請使用指定的 extra_float_digits 值,而不是最大可用精度。 為備份目的而進行的常規傾印不應使用此選項。

--if-exists

使用 DROP ... IF EXISTS 指令來刪除 --clean 模式中的物件。 這會抑制可能報告的 不存在 錯誤。 除非也指定了 --clean,否則此選項無效。

--inserts

將資料傾印為 INSERT 指令(而不是 COPY)。 這會使還原速度非常慢; 它主要用於製作可以載入到非 PostgreSQL 資料庫中的傾印。 請注意,如果您重新排列了欄位順序,則還原可能會完全失敗。 --column-inserts 選項更安全,但速度甚至更慢。

--load-via-partition-root

傾印資料表分割區的資料時,使 COPYINSERT 陳述式以包含該分割區的分割層次結構的根為目標,而不是分割區本身。 這會導致在載入資料時為每一列重新確定適當的分割區。 當在伺服器上還原資料時,如果列不一定落入與原始伺服器上相同的分割區中,則此方法可能很有用。 例如,如果分割欄的類型為 text,並且兩個系統對用於對分割欄進行排序的定序具有不同的定義,則可能會發生這種情況。

--lock-wait-timeout=timeout

不要永遠等待以在傾印開始時取得共用資料表鎖定。 相反,如果無法在指定的 timeout 內鎖定資料表,則會失敗。 超時時間可以用 SET statement_timeout 接受的任何格式指定。

--no-comments

不要傾印註解。

--no-publications

不要傾印出版品。

--no-role-passwords

不要傾印角色的密碼。 還原後,角色將具有空密碼,並且密碼驗證將始終失敗,直到設定密碼。 由於指定此選項時不需要密碼值,因此角色資訊是從目錄視圖 pg_roles 而不是 pg_authid 讀取的。 因此,如果某些安全性原則限制了對 pg_authid 的存取,此選項也會有所幫助。

--no-security-labels

不要傾印安全性標籤。

--no-subscriptions

不要傾印訂閱。

--no-sync

預設情況下,pg_dumpall 將等待所有檔案安全地寫入磁碟。 此選項使 pg_dumpall 在不等待的情況下返回,這更快,但意味著隨後的作業系統崩潰可能會使傾印損壞。 通常,此選項對於測試很有用,但不應在從生產安裝中傾印資料時使用。

--no-table-access-method

不要輸出指令來選擇資料表存取方法。 使用此選項,所有物件都將使用還原期間預設的任何資料表存取方法來建立。

--no-tablespaces

不要輸出指令來建立表空間,也不要為物件選擇表空間。 使用此選項,所有物件都將在還原期間預設的任何表空間中建立。

--no-toast-compression

不要輸出指令來設定TOAST壓縮方法。使用此選項,所有欄位都會以預設的壓縮設定還原。

--no-unlogged-table-data

不要傾印未記錄表格的內容。此選項不會影響表格定義(綱要)是否傾印;它只會抑制傾印表格資料。

--on-conflict-do-nothing

新增 ON CONFLICT DO NOTHINGINSERT 指令。除非同時指定 --inserts--column-inserts 選項,否則此選項無效。

--quote-all-identifiers

強制引用所有識別符。當從 PostgreSQL 主要版本與 pg_dumpall 不同的伺服器傾印資料庫,或當輸出旨在載入到不同主要版本的伺服器時,建議使用此選項。預設情況下,pg_dumpall 僅引用其自身主要版本中的保留字識別符。當處理可能具有稍微不同保留字集的其他版本的伺服器時,這有時會導致相容性問題。使用 --quote-all-identifiers 可以防止此類問題,但代價是傾印腳本的可讀性較差。

--rows-per-insert=nrows

將資料傾印為 INSERT 指令(而不是 COPY)。控制每個 INSERT 指令的最大列數。指定的值必須是大於零的數字。還原期間的任何錯誤只會導致問題 INSERT 的一部分列遺失,而不是整個表格內容。

--use-set-session-authorization

輸出 SQL 標準 SET SESSION AUTHORIZATION 指令,而不是 ALTER OWNER 指令來確定物件所有權。這使得傾印更符合標準,但根據傾印中物件的歷史記錄,可能無法正確還原。

-?
--help

顯示關於 pg_dumpall 指令列引數的說明,然後結束。

以下指令列選項控制資料庫連線參數。

-d connstr
--dbname=connstr

指定用於連線到伺服器的參數,作為 連線字串;這些將覆蓋任何衝突的指令列選項。

為了與其他用戶端應用程式保持一致,該選項稱為 --dbname,但由於 pg_dumpall 需要連線到多個資料庫,因此連線字串中的資料庫名稱將被忽略。使用 -l 選項來指定用於初始連線的資料庫名稱,這將傾印全域物件並探索應該傾印的其他資料庫。

-h host
--host=host

指定資料庫伺服器執行的機器的主機名稱。如果該值以斜線開頭,則將其用作 Unix 網域套接字的目錄。預設值取自 PGHOST 環境變數(如果已設定),否則會嘗試 Unix 網域套接字連線。

-l dbname
--database=dbname

指定要連線的資料庫名稱,用於傾印全域物件並探索應該傾印的其他資料庫。如果未指定,將使用 postgres 資料庫,如果該資料庫不存在,則將使用 template1

-p port
--port=port

指定伺服器監聽連線的 TCP 連接埠或本機 Unix 網域套接字檔案擴充名。預設為 PGPORT 環境變數(如果已設定),或編譯時預設值。

-U username
--username=username

要以哪個使用者名稱連線。

-w
--no-password

永遠不要發出密碼提示。如果伺服器需要密碼驗證,並且無法透過其他方式(例如 .pgpass 檔案)取得密碼,則連線嘗試將會失敗。此選項在批次作業和沒有使用者輸入密碼的腳本中很有用。

-W
--password

強制 pg_dumpall 在連線到資料庫之前提示輸入密碼。

此選項並非絕對必要,因為如果伺服器要求密碼驗證,pg_dumpall 會自動提示輸入密碼。但是,pg_dumpall 會浪費一次連線嘗試來確定伺服器是否需要密碼。在某些情況下,值得輸入 -W 以避免額外的連線嘗試。

請注意,每次要傾印的資料庫都會再次出現密碼提示。通常,設定 ~/.pgpass 檔案比依賴手動輸入密碼更好。

--role=rolename

指定用於建立傾印的角色名稱。此選項會導致 pg_dumpall 在連線到資料庫後發出 SET ROLE rolename 指令。當經過驗證的使用者(由 -U 指定)缺乏 pg_dumpall 所需的權限,但可以切換到具有所需權限的角色時,此選項很有用。某些安裝具有禁止直接以超級使用者身份登入的策略,使用此選項可以進行傾印而不違反該策略。

環境

PGHOST
PGOPTIONS
PGPORT
PGUSER

預設連線參數

PG_COLOR

指定是否在診斷訊息中使用顏色。可能的值為 alwaysautonever

此公用程式與大多數其他 PostgreSQL 公用程式一樣,也使用 libpq 支援的環境變數(請參閱 第 32.15 節)。

備註

由於 pg_dumpall 在內部呼叫 pg_dump,因此某些診斷訊息將參考 pg_dump

即使您的意圖是將傾印腳本還原到新的叢集中,--clean 選項也可能很有用。使用 --clean 授權腳本刪除並重新建立內建的 postgrestemplate1 資料庫,確保這些資料庫將保留與來源叢集中相同的屬性(例如,地區設定和編碼)。如果沒有該選項,這些資料庫將保留其現有的資料庫層級屬性,以及任何先前存在的內容。

還原後,明智的做法是在每個資料庫上執行 ANALYZE,以便最佳化器擁有有用的統計資訊。您也可以執行 vacuumdb -a -z 來分析所有資料庫。

不應期望傾印腳本在完全沒有錯誤的情況下執行。特別是,由於腳本將為來源叢集中存在的每個角色發出 CREATE ROLE,因此對於引導超級使用者,肯定會收到 角色已存在 錯誤,除非目標叢集是使用不同的引導超級使用者名稱初始化的。此錯誤是無害的,應忽略。使用 --clean 選項可能會產生關於不存在物件的額外無害錯誤訊息,儘管您可以透過新增 --if-exists 來最大限度地減少這些錯誤。

pg_dumpall 需要在還原之前存在所有需要的表空間目錄;否則,位於非預設位置的資料庫建立將會失敗。

範例

傾印所有資料庫

$ pg_dumpall > db.out

若要從此檔案還原資料庫,您可以使用

$ psql -f db.out postgres

連接到哪個資料庫並不重要,因為 pg_dumpall 建立的腳本檔案將包含建立和連接到已儲存資料庫的適當指令。例外情況是,如果您指定了 --clean,您必須最初連接到 postgres 資料庫;該腳本將嘗試立即刪除其他資料庫,而這對於您連接的資料庫將會失敗。

參見

請查看 pg_dump 以取得有關可能錯誤情況的詳細資訊。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表單來回報文件問題。