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 語句裝載資料。
當使用-d選項聲明瞭直接資料庫聯接時, pg_restore 在內部執行 SQL 語句。如果你執行 pg_restore 出了毛病, 請確保你能用類似 psql(1) 這樣的東西從資料庫中選取資訊。
如果你的安裝給template1資料庫增加了任何你自己的東西, 那麼請注意把 pg_dump 的輸出恢復到一個真正空的資料庫中; 否則你可能會收到因為重複定義所追加的物件而造成的錯誤資訊。要製作一個沒有任何本地附屬物的資料庫, 可以從template0而不是template1複製,比如:
CREATE DATABASE foo WITH TEMPLATE template0;
pg_restore 的侷限在下面列出。
- •
-
當向一個已經存在的表恢復資料,並且還使用了 --disable-triggers 選項時, pg_restore 在插入資料前放出一些查詢關閉使用者表上的觸發器, 在資料插入完成後重新開啟它們。如果恢復的中途停止,那麼系統表可能處於錯誤狀態。 - •
- 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
這裡分號是註釋分隔符,而行開頭的數字代表賦給每個專案的內部歸檔 ID。
檔案內的行可以註釋掉,刪除和/或重新排列。比如,
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 的輸入並且只會恢復專案 10 和 6,(以這個順序): $ 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