.\" auto-generated by docbook2man-spec $Revision: 1.1 $ .TH "PG_RESTORE" "1" "2003-11-02" "Application" "PostgreSQL Client Applications" .SH NAME pg_restore \- 從一個由 pg_dump 創建的備份文件中恢復 PostgreSQL 數據庫。 .SH SYNOPSIS .sp \fBpg_restore\fR\fR [ \fR\fB\fIoption\fB\fR...\fB \fR\fR]\fR\fR [ \fR\fB\fIfilename\fB \fR\fR]\fR .SH "DESCRIPTION 描述" .PP \fBpg_restore\fR 是一種用於恢復由 \fBpg_dump\fR(1) 創建的任何非純文本輸出格式中的 PostgreSQL 數據庫的應用。 它將發出必要的命令來重新構造數據庫,以便於把它恢復成保存它的時候的樣子。 歸檔(備份)文件還允許pg_restore 有選擇地進行恢復, 甚至在恢復前重新排列條目的順序。歸檔的文件設計成可以在不同的硬件體系之間移植。 .PP \fBpg_restore\fR 可以以兩種模式操作:如果聲明瞭數據庫名字, 那麼歸檔是直接恢復到數據庫裏。大對象只能用直接數據庫聯接進行恢復。 否則,先創建一個包含重建數據庫所必須的 SQL 命令的腳本(並且寫入到一個文件或者標準輸出), 類似 pg_dump 輸出純文本格式的時候創建的那種腳本。 因此,一些控制腳本輸出的選項就是摹擬 pg_dump 的操作。 .PP 顯然,\fBpg_restore\fR 無法恢復那些不存在歸檔文件中的信息; 比如,如果歸檔是用"把數據轉儲爲 INSERT命令"選項製作的, 那麼 pg_restore 將不能使用 COPY 語句裝載數據。 .SH "OPTIONS 選項" .PP \fBpg_restore\fR 接受下列命令行參數。 .TP \fB\fIfilename\fB\fR 聲明要恢復的備份文件的位置。如果沒有聲明,則使用標準輸入。 .TP \fB-a\fR .TP \fB--data-only\fR 只恢復數據,而不恢復表模式(數據定義)。 .TP \fB-c\fR .TP \fB--clean\fR 創建數據庫對象前先清理(刪除)它們。 .TP \fB-C\fR .TP \fB--create\fR 在恢復數據庫之前先創建它。(如果出現了這個選項,和 \fB-d\fR 在一起的數據庫名只是用於發出最初的 CREATE DATABASE 命令。 所有數據都恢復到名字出現在歸檔中的數據庫中去。) .TP \fB-d \fIdbname\fB\fR .TP \fB--dbname=\fIdbname\fB\fR 與數據庫 dbname 聯接並且直接恢復到該數據庫中。 .TP \fB-f \fIfilename\fB\fR .TP \fB--file=\fIfilename\fB\fR 聲明生成的腳本的輸出文件,或者出現 \fB-l\fR 選項時用於列表的文件,缺省是標準輸出。 .TP \fB-F \fIformat\fB\fR .TP \fB--format=\fIformat\fB\fR 聲明備份文件的格式。因爲pg_restore 會自動判斷格式,所以如果聲明瞭,它可以是下面之一: .RS .TP \fBt\fR 備份是一個 tar 歸檔。 使用這個格式允許在恢復數據庫的時候重新排序和/或把表模式元素排除出去。 同時還可能在恢復的時候限制裝載的數據。 .TP \fBc\fR 備份的格式是來自 pg_dump 的客戶化格式。 這是最靈活的格式,因爲它允許重新對數據排序,也允許重載表模式元素。 缺省時這個格式是壓縮的。 .RE .PP .TP \fB-i\fR .TP \fB--ignore-version\fR 忽略數據庫版本檢查。 .TP \fB-I \fIindex\fB\fR .TP \fB--index=\fIindex\fB\fR 只恢復命名的索引。 .TP \fB-l\fR .TP \fB--list\fR 列出備份的內容。這個操作的輸出可以用 -L 選項限制和重排所恢復的項目。 .TP \fB-L \fIlist-file\fB\fR .TP \fB--use-list=\fIlist-file\fB\fR 只恢復在 list-file 裏面的元素,以它們在文件中出現的順序。 你可以移動各個行並且也可以通過在行開頭放 ';' 的方式註釋。(見下文獲取例子。) .TP \fB-N\fR .TP \fB--orig-order\fR 以最初在 pg_dump 裏生成的轉儲順序恢復項目。 這個選項沒有什麼實際的用途,因爲 pg_dump 會以自己方便的順序生成項, 這個順序不可能是恢復這些數據的安全順序。 (這個順序不是項最後在歸檔的內容列表中列出的順序。) 又見 -r。 .TP \fB-o\fR .TP \fB--oid-order\fR 以 OID 順序恢復項目。這個選項用處很小, 因爲 OID 只是最初創建順序的一個近似指示。 如果還聲明瞭 -N,那麼這個選項還覆蓋它。又見 -r。 .TP \fB-O\fR .TP \fB--no-owner\fR 不要輸出設置對象的權限,以便與最初的數據庫匹配的命令。 缺省時,pg_restore 發出 \fBSET SESSION AUTHORIZATION\fR 語句設置創建出來的模式元素的所有者權限。 如果最初的數據庫連接不是由超級用戶(或者是擁有所有創建出來的對象的同一個用戶)發起的,那麼這些語句將失敗。 使用 -O,那麼任何用戶都可以用於初始的連接,並且這個用戶將擁有所有創建出來的對象。 .TP \fB-P \fIfunction-name(argtype [, ...])\fB\fR .TP \fB--function=\fIfunction-name(argtype [, ...])\fB\fR 只恢復指定的命名函數。請注意仔細拼寫函數名及其參數,應該和轉儲的內容列表中的完全一樣。 .TP \fB-r\fR .TP \fB--rearrange\fR 以對象類型重排項目(這個發生在以 -N 或者 -o 排序之後)。 重排是爲了給出最大可能的性能。 如果沒有 \fB-N\fR, \fB-o\fR, 和\fB-r\fR,那麼 pg_restore 以項目出現在歸檔 的內容列表中的順序恢復他們, 或者按照他們在 list-file 裏面的順序恢復他們 \(em 假如給出了 -L 的話。 -o 和 -r 的組合複製了 pg_dump 在創建歸檔的內容列表 之前進行的排序, 因此,這個選項通常沒必要聲明。 .TP \fB-R\fR .TP \fB--no-reconnect\fR 這個選項已經廢棄了,但是爲了保持向下兼容仍然接受。 .TP \fB-s\fR .TP \fB--schema-only\fR 只恢復表結構(數據定義)。不恢復數據,序列值將重置。 .TP \fB-S \fIusername\fB\fR .TP \fB--superuser=\fIusername\fB\fR 設置關閉觸發器時聲明超級用戶的用戶名。 只有在設置了 \fB--disable-triggers\fR 的時候纔有用。 .TP \fB-t \fItable\fB\fR .TP \fB--table=\fItable\fB\fR 只恢復表指定的表的定義和/或數據。 .TP \fB-T \fItrigger\fB\fR .TP \fB--trigger=\fItrigger\fB\fR 只恢復指定的觸發器。 .TP \fB-v\fR .TP \fB--verbose\fR 聲明冗餘模式。 .TP \fB-x\fR .TP \fB--no-privileges\fR .TP \fB--no-acl\fR 避免 ACL 的恢復(grant/revoke 命令)。 .TP \fB-X use-set-session-authorization\fR .TP \fB--use-set-session-authorization\fR 這個選項已經廢棄了,但是出於向下兼容,仍然接受。 pg_restore 現在總是表現得像以前選中這個選項一樣。 .TP \fB-X disable-triggers\fR .TP \fB--disable-triggers\fR 這個選項只有在執行僅恢復數據的時候才相關。它告訴 pg_restore 在裝載數據的時候執行一些命令臨時關閉在目標表上的觸發器。 如果你在表上有完整性檢查或者其它觸發器, 而你又不希望在裝載數據的時候激活它們,那麼可以使用這個選項。 目前,爲 \fB--disable-triggers\fR 發出的命令必須以超級用戶發出。 因此,你應該也要用 -S 聲明一個超級用戶名,或者更好是設置 \fB--use-set-session-authorization\fR 並且以 PostgreSQL 超級用戶身份運行 pg_restore。 .PP .PP \fBpg_restore\fR 還接受下面的命令行參數做爲聯接參數: .TP \fB-h \fIhost\fB\fR .TP \fB--host=\fIhost\fB\fR 聲明服務器運行的機器的主機名。 如果數值以斜扛開頭,那麼它被用做 Unix 域套接字的目錄。 缺省是從 PGHOST 環境變量中獲取的(如果設置了), 否則將嘗試進行 Unix 域套接字。 .TP \fB-p \fIport\fB\fR .TP \fB--port=\fIport\fB\fR 聲明服務器偵聽的 TCP 端口或者本地的 Unix 域套接字文件擴展。 缺省是環境變量 PGPORT 的值(如果設置了的話), 否則就說編譯的缺省。 .TP \fB-U \fIusername\fB\fR 以給出用戶身分聯接。 .TP \fB-W\fR 強制給出口令提示。如果服務器要求口令認證,那麼這個應該自動發生。 .PP .SH "ENVIRONMENT 環境" .TP \fBPGHOST\fR .TP \fBPGPORT\fR .TP \fBPGUSER\fR 缺省連接參數。 .SH "DIAGNOSTICS 診斷" .PP 當使用-d選項聲明瞭直接數據庫聯接時, pg_restore 在內部執行 SQL 語句。如果你運行 pg_restore 出了毛病, 請確保你能用類似 \fBpsql\fR(1) 這樣的東西從數據庫中選取信息。 .SH "NOTES 注意" .PP 如果你的安裝給template1數據庫增加了任何你自己的東西, 那麼請注意把 pg_dump 的輸出恢復到一個真正空的數據庫中; 否則你可能會收到因爲重複定義所追加的對象而造成的錯誤信息。要製作一個沒有任何本地附屬物的數據庫, 可以從template0而不是template1拷貝,比如: .sp .nf CREATE DATABASE foo WITH TEMPLATE template0; .sp .fi .PP \fBpg_restore\fR 的侷限在下面列出。 .TP 0.2i \(bu 當向一個已經存在的表恢復數據,並且還使用了 \fB--disable-triggers\fR 選項時, pg_restore 在插入數據前放出一些查詢關閉用戶表上的觸發器, 在數據插入完成後重新打開它們。如果恢復的中途停止,那麼系統表可能處於錯誤狀態。 .TP 0.2i \(bu \fBpg_restore\fR 將不會爲單一的表恢復大對象。 如果一個歸檔包含大對象,那麼所有大對象都將被恢復。 .PP .PP 又見參閱 \fBpg_dump\fR(1) 的文擋獲取有關 pg_dump 的侷限的細節。 .PP 一旦完成恢復,最好在每個恢復的對象上運行 \fBANALYZE\fR, 以便給優化器有用的統計。 .SH "EXAMPLES 例子" .PP 把一個包含大對象的叫 mydb 的數據庫轉儲到一個tar文件: .sp .nf $ \fBpg_dump -Ft -b mydb > db.tar\fR .sp .fi .PP 把這個數據庫恢復到現有的叫 newdb 的數據庫中(連同BLOB): .sp .nf $ \fBpg_restore -d newdb db.tar\fR .sp .fi .PP 要對項目重新排序,首先必須轉儲歸檔的目錄: .sp .nf $ \fBpg_restore -l archive.file > archive.list\fR .sp .fi 這個文件由一行頭和每個項目一行組成,比如。 .sp .nf ; ; 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 .sp .fi 這裏分號是註釋分隔符,而行開頭的數字代表賦給每個項目的內部歸檔 ID。 .PP 文件內的行可以註釋掉,刪除和/或重新排列。比如, .sp .nf 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 .sp .fi 可以用做 pg_restore 的輸入並且只會恢復項目 10 和 6,(以這個順序): .sp .nf $ \fBpg_restore -L archive.list archive.file\fR .sp .fi .SH "HISTORY 歷史" .PP \fBpg_restore\fR 工具第一次出現在 PostgreSQL 7.1。 .SH "SEE ALSO 參見" \fBpg_dump\fR(1), \fBpg_dumpall\fR(1), \fBpsql\fR(1) .SH "譯者" .B Postgresql 中文網站 .B 何偉平 .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR