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。
pg_dump(1), pg_dumpall(1), psql(1)
Postgresql 中文網站 何偉平 <laser@pgsqldb.org>
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
2003-11-02 | Application |