PG_RESTORE(1) | PostgreSQL Client Applications | PG_RESTORE(1) |
pg_restore - 從一個由 pg_dump 創建的備份文件中恢復 PostgreSQL 數據庫。
pg_restore [ option... ] [ filename ]
pg_restore 是一種用於恢復由 pg_dump(1) 創建的任何非純文本輸出格式中的 PostgreSQL 數據庫的應用。 它將發出必要的命令來重新構造數據庫,以便於把它恢復成保存它的時候的樣子。 歸檔(備份)文件還允許pg_restore 有選擇地進行恢復, 甚至在恢復前重新排列條目的順序。歸檔的文件設計成可以在不同的硬件體系之間移植。
pg_restore 可以以兩種模式操作:如果聲明瞭數據庫名字, 那麼歸檔是直接恢復到數據庫裏。大對象只能用直接數據庫聯接進行恢復。 否則,先創建一個包含重建數據庫所必須的 SQL 命令的腳本(並且寫入到一個文件或者標準輸出), 類似 pg_dump 輸出純文本格式的時候創建的那種腳本。 因此,一些控制腳本輸出的選項就是摹擬 pg_dump 的操作。
顯然,pg_restore 無法恢復那些不存在歸檔文件中的信息; 比如,如果歸檔是用"把數據轉儲爲 INSERT命令"選項製作的, 那麼 pg_restore 將不能使用 COPY 語句裝載數據。
pg_restore 接受下列命令行參數。
如果沒有 -N, -o, 和-r,那麼 pg_restore 以項目出現在歸檔 的內容列表中的順序恢復他們, 或者按照他們在 list-file 裏面的順序恢復他們 — 假如給出了 -L 的話。 -o 和 -r 的組合複製了 pg_dump 在創建歸檔的內容列表 之前進行的排序, 因此,這個選項通常沒必要聲明。
目前,爲 --disable-triggers
發出的命令必須以超級用戶發出。
因此,你應該也要用
-S
聲明一個超級用戶名,或者更好是設置
--use-set-session-authorization 並且以
PostgreSQL
超級用戶身份運行
pg_restore。
pg_restore 還接受下面的命令行參數做爲聯接參數:
當使用-d選項聲明瞭直接數據庫聯接時, pg_restore 在內部執行 SQL 語句。如果你運行 pg_restore 出了毛病, 請確保你能用類似 psql(1) 這樣的東西從數據庫中選取信息。
如果你的安裝給template1數據庫增加了任何你自己的東西, 那麼請注意把 pg_dump 的輸出恢復到一個真正空的數據庫中; 否則你可能會收到因爲重複定義所追加的對象而造成的錯誤信息。要製作一個沒有任何本地附屬物的數據庫, 可以從template0而不是template1拷貝,比如:
CREATE DATABASE foo WITH TEMPLATE template0;
pg_restore 的侷限在下面列出。
又見參閱 pg_dump(1)
的文擋獲取有關 pg_dump
的侷限的細節。
一旦完成恢復,最好在每個恢復的對象上運行
ANALYZE,
以便給優化器有用的統計。
把一個包含大對象的叫 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
文件內的行可以註釋掉,刪除和/或重新排列。比如,
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 -L archive.list archive.file
pg_restore 工具第一次出現在 PostgreSQL 7.1。
Postgresql 中文網站 何偉平 <laser@pgsqldb.org>
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
2003-11-02 | Application |