NAME
pg_restore - 從一個由 pg_dump 建立的備份檔案中恢復 PostgreSQL 資料庫。SYNOPSIS
pg_restore [ option... ] [ filename ]DESCRIPTION 描述
pg_restore 是一種用於恢復由 pg_dump(1) 建立的任何非純文字輸出格式中的 PostgreSQL 資料庫的應用。 它將發出必要的命令來重新構造資料庫,以便於把它恢復成儲存它的時候的樣子。 歸檔(備份)檔案還允許pg_restore 有選擇地進行恢復, 甚至在恢復前重新排列條目的順序。歸檔的檔案設計成可以在不同的硬體體系之間移植。 pg_restore 可以以兩種模式操作:如果聲明瞭資料庫名字, 那麼歸檔是直接恢復到資料庫裡。大物件只能用直接資料庫聯接進行恢復。 否則,先建立一個包含重建資料庫所必須的 SQL 命令的指令碼(並且寫入到一個檔案或者標準輸出), 類似 pg_dump 輸出純文字格式的時候建立的那種指令碼。 因此,一些控制指令碼輸出的選項就是摹擬 pg_dump 的操作。 顯然, pg_restore 無法恢復那些不存在歸檔檔案中的資訊; 比如,如果歸檔是用"把資料轉儲為 INSERT命令"選項製作的, 那麼 pg_restore 將不能使用 COPY 語句裝載資料。OPTIONS 選項
pg_restore 接受下列命令列引數。- filename
-
宣告要恢復的備份檔案的位置。如果沒有宣告,則使用標準輸入。
- -a
- --data-only
-
只恢復資料,而不恢復表模式(資料定義)。
- -c
- --clean
-
建立資料庫物件前先清理(刪除)它們。
- -C
- --create
-
在恢復資料庫之前先建立它。(如果出現了這個選項,和 -d 在一起的資料庫名只是用於發出最初的 CREATE DATABASE 命令。 所有資料都恢復到名字出現在歸檔中的資料庫中去。)
- -d dbname
- --dbname=dbname
-
與資料庫 dbname 聯接並且直接恢復到該資料庫中。
- -f filename
- --file=filename
-
宣告生成的指令碼的輸出檔案,或者出現 -l 選項時用於列表的檔案,預設是標準輸出。
- -F format
- --format=format
-
宣告備份檔案的格式。因為pg_restore 會自動判斷格式,所以如果聲明瞭,它可以是下面之一:
- t
-
備份是一個 tar 歸檔。 使用這個格式允許在恢復資料庫的時候重新排序和/或把表模式元素排除出去。 同時還可能在恢復的時候限制裝載的資料。
- c
-
備份的格式是來自 pg_dump 的客戶化格式。 這是最靈活的格式,因為它允許重新對資料排序,也允許過載表模式元素。 預設時這個格式是壓縮的。
- -i
- --ignore-version
-
忽略資料庫版本檢查。
- -I index
- --index=index
-
只恢復命名的索引。
- -l
- --list
-
列出備份的內容。這個操作的輸出可以用 -L 選項限制和重排所恢復的專案。
- -L list-file
- --use-list=list-file
-
只恢復在 list-file 裡面的元素,以它們在檔案中出現的順序。 你可以移動各個行並且也可以透過在行開頭放 ';' 的方式註釋。(見下文獲取例子。)
- -N
- --orig-order
-
以最初在 pg_dump 裡生成的轉儲順序恢復專案。 這個選項沒有什麼實際的用途,因為 pg_dump 會以自己方便的順序生成項, 這個順序不可能是恢復這些資料的安全順序。 (這個順序不是項最後在歸檔的內容列表中列出的順序。) 又見 -r。
- -o
- --oid-order
-
以 OID 順序恢復專案。這個選項用處很小, 因為 OID 只是最初建立順序的一個近似指示。 如果還聲明瞭 -N,那麼這個選項還覆蓋它。又見 -r。
- -O
- --no-owner
-
不要輸出設定物件的許可權,以便與最初的資料庫匹配的命令。 預設時,pg_restore 發出 SET SESSION AUTHORIZATION 語句設定創建出來的模式元素的所有者許可權。 如果最初的資料庫連線不是由超級使用者(或者是擁有所有創建出來的物件的同一個使用者)發起的,那麼這些語句將失敗。 使用 -O,那麼任何使用者都可以用於初始的連線,並且這個使用者將擁有所有創建出來的物件。
- -P function-name(argtype [, ...])
- --function=function-name(argtype [, ...])
-
只恢復指定的命名函式。請注意仔細拼寫函式名及其引數,應該和轉儲的內容列表中的完全一樣。
- -r
- --rearrange
-
以物件型別重排專案(這個發生在以 -N 或者 -o 排序之後)。 重排是為了給出最大可能的效能。 如果沒有 -N, -o, 和-r,那麼 pg_restore 以專案出現在歸檔 的內容列表中的順序恢復他們, 或者按照他們在 list-file 裡面的順序恢復他們 — 假如給出了 -L 的話。 -o 和 -r 的組合複製了 pg_dump 在建立歸檔的內容列表 之前進行的排序, 因此,這個選項通常沒必要宣告。
- -R
- --no-reconnect
-
這個選項已經廢棄了,但是為了保持向下相容仍然接受。
- -s
- --schema-only
-
只恢復表結構(資料定義)。不恢復資料,序列值將重置。
- -S username
- --superuser=username
-
設定關閉觸發器時宣告超級使用者的使用者名稱。 只有在設定了 --disable-triggers 的時候才有用。
- -t table
- --table=table
-
只恢復表指定的表的定義和/或資料。
- -T trigger
- --trigger=trigger
-
只恢復指定的觸發器。
- -v
- --verbose
-
宣告冗餘模式。
- -x
- --no-privileges
- --no-acl
-
避免 ACL 的恢復(grant/revoke 命令)。
- -X use-set-session-authorization
- --use-set-session-authorization
-
這個選項已經廢棄了,但是出於向下相容,仍然接受。 pg_restore 現在總是表現得像以前選中這個選項一樣。
- -X disable-triggers
- --disable-triggers
-
這個選項只有在執行僅恢復資料的時候才相關。它告訴 pg_restore 在裝載資料的時候執行一些命令臨時關閉在目標表上的觸發器。 如果你在表上有完整性檢查或者其它觸發器, 而你又不希望在裝載資料的時候啟用它們,那麼可以使用這個選項。
目前,為 --disable-triggers 發出的命令必須以超級使用者發出。 因此,你應該也要用 -S 宣告一個超級使用者名稱,或者更好是設定 --use-set-session-authorization 並且以 PostgreSQL 超級使用者身份執行 pg_restore。
- -h host
- --host=host
-
宣告伺服器執行的機器的主機名。 如果數值以斜扛開頭,那麼它被用做 Unix 域套接字的目錄。 預設是從 PGHOST 環境變數中獲取的(如果設定了), 否則將嘗試進行 Unix 域套接字。
- -p port
- --port=port
-
宣告伺服器偵聽的 TCP 埠或者本地的 Unix 域套接字檔案擴充套件。 預設是環境變數 PGPORT 的值(如果設定了的話), 否則就說編譯的預設。
- -U username
-
以給出使用者身分聯接。
- -W
-
強制給出口令提示。如果伺服器要求口令認證,那麼這個應該自動發生。
ENVIRONMENT 環境
- PGHOST
- PGPORT
- PGUSER
-
預設連線引數。
DIAGNOSTICS 診斷
當使用-d選項聲明瞭直接資料庫聯接時, pg_restore 在內部執行 SQL 語句。如果你執行 pg_restore 出了毛病, 請確保你能用類似 psql(1) 這樣的東西從資料庫中選取資訊。
NOTES 注意
如果你的安裝給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, 以便給最佳化器有用的統計。
EXAMPLES 例子
把一個包含大物件的叫 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
HISTORY 歷史
pg_restore 工具第一次出現在 PostgreSQL 7.1。SEE ALSO 參見
pg_dump(1), pg_dumpall(1), psql(1)譯者
Postgresql 中文網站 何偉平 <[email protected]>跋
本頁面中文版由中文 man 手冊頁計劃提供。2003-11-02 | Application |