Provided by: manpages-zh_1.5.2-1_all bug

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。

       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 中文網站 何偉平 <laser@pgsqldb.org>