?
This document uses PHP Chinese website manual Release
pg_restore [connection-option...] [option...] [filename]
pg_restore用于恢復由pg_dump轉(zhuǎn)儲的任何非純文本格式中的PostgreSQL數(shù)據(jù)庫。 它將發(fā)出必要的命令重建數(shù)據(jù)庫,并把它恢復成轉(zhuǎn)儲時的樣子。 歸檔(備份)文件還允許pg_restore有選擇地進行恢復,甚至在恢復前重新排列條目的順序。 歸檔的文件設(shè)計成可以在不同的硬件體系之間移植。
pg_restore可以按照兩種模式操作。如果聲明了數(shù)據(jù)庫名字, pg_restore直接連在數(shù)據(jù)庫里以及歸檔是直接恢復到數(shù)據(jù)庫里。 否則,先創(chuàng)建一個包含重建數(shù)據(jù)庫所必須的SQL命令的腳本,并且寫入到一個文件或者標準輸出。 等效于pg_dump輸出純文本格式的時候創(chuàng)建的那種腳本。 因此,一些控制輸出的選項就是模擬pg_dump的選項設(shè)置的。
顯然,pg_restore無法恢復那些不存在歸檔文件中的信息; 比如,如果歸檔是用"把數(shù)據(jù)轉(zhuǎn)儲為INSERT命令"選項制作的, 那么pg_restore將不能使用COPY語句加載數(shù)據(jù)。
pg_restore接受下列命令行參數(shù):
要恢復的備份文件的位置。如果沒有聲明,則使用標準輸入。
只恢復數(shù)據(jù),而不恢復表模式(數(shù)據(jù)定義)。
創(chuàng)建數(shù)據(jù)庫對象前先清理(刪除)它們。
在恢復數(shù)據(jù)庫之前先創(chuàng)建它。如果出現(xiàn)了這個選項, 和-d在一起的數(shù)據(jù)庫名只是用于發(fā)出最初的CREATE DATABASE命令。所有數(shù)據(jù)都恢復到名字出現(xiàn)在歸檔中的數(shù)據(jù)庫中去。
與數(shù)據(jù)庫dbname連接并且直接恢復到該數(shù)據(jù)庫中。
如果在向數(shù)據(jù)庫發(fā)送SQL命令的時候碰到錯誤,則退出。缺省是繼續(xù)執(zhí)行并且在恢復結(jié)束時顯示一個錯誤計數(shù)。
指定生成的腳本的輸出文件,或者出現(xiàn)-l選項時用于列表的文件,缺省是標準輸出。
指定備份文件的格式。因為pg_restore會自動判斷格式,所以如果一定要指定的話,它可以是下面之一:
備份是一個 tar 歸檔。
備份的格式是來自pg_dump的自定義格式。這是最靈活的格式,因為它允許重新對數(shù)據(jù)排序,也允許重載表模式元素。缺省時這個格式是壓縮的。
一個現(xiàn)在被忽略的棄用選項。
只恢復命名的索引。
運行pg_restore —的最耗時部分;這些加載護具、創(chuàng)建索引或者創(chuàng)建 約束 —使用多個并發(fā)作業(yè)。該選項可以顯著減少將大型數(shù)據(jù)庫存儲到一個運行在一個多 處理器機上的服務(wù)器所用的時間。
每個工作是一個進程或一個線程,根據(jù)操作系統(tǒng),并使用一個島服務(wù)器的單獨連接。
該選項的最優(yōu)值取決于服務(wù)器、客戶和網(wǎng)絡(luò)的硬件設(shè)置。因素包括CPU內(nèi)核的數(shù)量和磁盤設(shè)置。 良好的開端是在服務(wù)器上的CPU內(nèi)核的數(shù)量,但在許多情況下更大的數(shù)值也能導致更快的恢復時間。 當然,值過高會因為抖動降低性能。
僅支持有用戶定義的格式支持該選項。輸入文件必須是一個常規(guī)文件(像一個pipe就不是)。 在發(fā)射一個腳本而不是直接連接到一個數(shù)據(jù)庫服務(wù)器時,該選項會被忽略。同時, 并發(fā)作業(yè)不能與--single-transaction選項一起使用。
列出歸檔文件的內(nèi)容。該操作的輸出可以用作輸入-L選項。 請注意如果過濾選項(如-n或-t)與-l一同使用, 他們將會限制列出的項。
僅恢復那些在list-file中列出的歸檔元素, 并按他們在文件中出現(xiàn)的順序恢復他們。請注意,如果像-n或者-t這樣的 過濾開關(guān)與-L一起使用,他們將進一步限制物品恢復。
list-file通常通過編輯一個先前的-l 操作來創(chuàng)建??梢砸苿踊騽h除行,并且也可以通過在行前放置一個分號(;) 注釋掉該行。請看下面的例子。
只恢復指定名字的模式里面的定義和/或數(shù)據(jù)。 這個選項可以和-t選項一起使用,實現(xiàn)只轉(zhuǎn)儲一個表的數(shù)據(jù)。
不要輸出設(shè)置與最初數(shù)據(jù)庫對象權(quán)限匹配的命令。缺省時,pg_restore發(fā)出ALTER OWNER 或SET SESSION AUTHORIZATION語句設(shè)置創(chuàng)建出來的模式元素的所有者權(quán)限。 如果最初的數(shù)據(jù)庫連接不是由超級用戶(或者是擁有所有創(chuàng)建出來的對象的同一個用戶)發(fā)起的, 那么這些語句將失敗。如果使用-O,那么任何用戶都可以用于初始的連接, 并且這個用戶將擁有所有創(chuàng)建出來的對象。
不要輸出命令來選擇表空間。使用該選項,在恢復數(shù)據(jù)時的默認表空間中所有的對象將會被創(chuàng)建。
只恢復指定的命名函數(shù)。請注意仔細拼寫函數(shù)名及其參數(shù),應該和轉(zhuǎn)儲的內(nèi)容列表中的完全一樣。
這個選項已經(jīng)廢棄了,但是為了保持向下兼容仍然接受。
只恢復表結(jié)構(gòu)(數(shù)據(jù)定義)。不恢復數(shù)據(jù)(數(shù)據(jù)表內(nèi)容)。序列的當前值也不會得到恢復。 請不要和--schema選項混淆,那里使用了"模式"(schema)的其它含義。
設(shè)置關(guān)閉觸發(fā)器時聲明超級用戶的用戶名。只有在設(shè)置了--disable-triggers的時候才有用。
只恢復指定的表的定義和/或數(shù)據(jù)。 This can be combined with the -n option to specify a schema.
只恢復指定的觸發(fā)器。
聲明冗余模式。
輸出pg_restore 版本并退出。
禁止恢復訪問權(quán)限(grant/revoke命令)。
這個選項只有在執(zhí)行僅恢復數(shù)據(jù)的時候才相關(guān)。 它告訴pg_restore在加載數(shù)據(jù)的時候執(zhí)行一些命令臨時關(guān)閉在目標表上的觸發(fā)器。 如果你在表上有完整性檢查或者其它觸發(fā)器,而你又不希望在加載數(shù)據(jù)的時候激活它們,那么可以使用這個選項。
目前,為--disable-triggers發(fā)出的命令必須以超級用戶發(fā)出。 因此,你應該也要用-S聲明一個超級用戶名,或者更好是以超級用戶身份運行PostgreSQL。
輸出SQL標準的SET SESSION AUTHORIZATION命令,而不是ALTER OWNER命令。 這樣令轉(zhuǎn)儲與標準兼容的更好,但是根據(jù)轉(zhuǎn)儲中對象的歷史,這個轉(zhuǎn)儲可能不能恰當?shù)鼗謴汀?
缺省時,即使創(chuàng)建表的命令因為該表已經(jīng)存在而失敗了,表中的數(shù)據(jù)仍將被恢復。 使用這個選項之后,這些表的數(shù)據(jù)就將跳過恢復操作。當目標數(shù)據(jù)庫可能已經(jīng)包含所需恢復的某些表的內(nèi)容時, 該選項就很有用處了。比如,用于PostgreSQL擴展的輔助表(例如PostGIS)就可能已經(jīng)在目標數(shù)據(jù)庫中恢復過了,使用該選項就可以防止多次恢復以致重復或者覆蓋了已經(jīng)恢復的數(shù)據(jù)。
該選項僅在直接向一個數(shù)據(jù)庫中恢復的時候有效,在生成SQL腳本輸出時無效。
作為一個單獨事務(wù)來存儲(也就是在BEGIN/COMMIT)中封裝發(fā)射命令。) 這確保了:要么所有的命令成功完成,要么沒有申請修改。該選項蘊含--exit-on-error。
顯示關(guān)于pg_restore命令行參數(shù)的幫助并退出。
pg_restore還接受下面的命令行參數(shù)做為連接參數(shù):
指定運行服務(wù)器的主機名。如果數(shù)值以斜杠開頭,則被用作到Unix域套接字的路徑。缺省從PGHOST環(huán)境變量中獲取(如果設(shè)置了的話),否則,嘗試一個Unix域套接字連接。
指定服務(wù)器正在偵聽的TCP端口或本地Unix域套接字文件的擴展(描述符)。 缺省使用PGPORT環(huán)境變量(如果設(shè)置了的話),否則,編譯時的缺省值。
User name to connect as.
從不提示密碼。如果服務(wù)器請求密碼身份認證并且一個密碼不能通過其他方式(如.pgpass 文件)來獲得,該鏈接嘗試就會失敗。該選項在沒有用戶可以輸入密碼時對批量作業(yè)和腳本中是有效的。
強制pg_restore在連接到一個數(shù)據(jù)庫之前提示密碼
該選項從來不是至關(guān)重要的,因為若服務(wù)器請求密碼身份認證pg_restore 將會自動提示一個密碼。然而,pg_restore將浪費一個連接嘗試發(fā)現(xiàn) 服務(wù)器需要一個密碼。在一些情況下,值得輸入-W來避免額外的連接嘗試。
聲明一個用于執(zhí)行還原的角色名。該選項導致pg_restore在連接到數(shù)據(jù)庫之后發(fā)布一個 SET ROLE rolename命令。 當已驗證的用戶(通過-U指定的)缺少pg_restore需要的權(quán)限,但是可以切換到 一個有請求的權(quán)限的角色時,該選項是有效的。一些安裝有一個反對作為一個超級用戶直接登錄的規(guī)則, 并且使用該選項允許在不違法規(guī)則的情況下轉(zhuǎn)儲。
缺省連接參數(shù)。
該使用程序,跟大部分其他PostgreSQL實用程序一樣,也使用libpq 支持的環(huán)境變量。(請參閱Section 31.13)。
當使用-d選項聲明了直接數(shù)據(jù)庫連接時,pg_restore 在內(nèi)部執(zhí)行SQL語句。 如果你運行pg_restore出了毛病,請確保你能用類似 psql這樣的東西從數(shù)據(jù)庫中選取信息。 另外,任何libpq前端庫使用的默認連接設(shè)置和環(huán)境變量將會適用。
如果你的安裝給template1數(shù)據(jù)庫增加了任何你自己的東西,那么請注意把pg_restore的輸出恢復到一個真正空的數(shù)據(jù)庫中; 否則你可能會收到因為重復定義所追加的對象而造成的錯誤信息。要制作一個沒有任何本地附屬物的數(shù)據(jù)庫, 可以從template0而不是template1拷貝,比如:
CREATE DATABASE foo WITH TEMPLATE template0;
pg_restore的局限如下:
當向一個已經(jīng)存在的表恢復數(shù)據(jù),并且還使用了--disable-triggers選項時, pg_restore在插入數(shù)據(jù)前放出一些查詢關(guān)閉用戶表上的觸發(fā)器,在數(shù)據(jù)插入完成后重新打開它們。如果恢復的中途停止,那么系統(tǒng)表可能處于錯誤狀態(tài)。
pg_restore不能有選擇地恢復大型對象;例如, 只有那些針對特定表的。如果一個歸檔包含大對象,那么所有的大對象將被恢復, 或者如果他們通過-L,-t或者其他選項被排除, 他們中沒有一個恢復。
參閱pg_dump的文擋獲取有關(guān)pg_dump的局限的細節(jié)。
一旦完成恢復,最好在每個恢復的對象上運行ANALYZE, 以便給優(yōu)化器有用的統(tǒng)計;更多信息請參考Section 23.1.3, Section 23.1.5。
假定我們已經(jīng)轉(zhuǎn)儲了mydb數(shù)據(jù)庫到一個自定義格式的文件中:
$ pg_dump -Fc mydb > db.dump
刪除該數(shù)據(jù)庫并從轉(zhuǎn)儲中重建:
$ dropdb mydb $ pg_restore -C -d postgres db.dump
在-d中指定的數(shù)據(jù)庫可以是當前集群中的任意數(shù)據(jù)庫;pg_restore 僅用該名字來為mydb發(fā)出CREATE DATABASE命令。 使用-C可以確保數(shù)據(jù)總是會被恢復到轉(zhuǎn)儲文件中指定名字的數(shù)據(jù)庫里面。
將轉(zhuǎn)儲出來的數(shù)據(jù)重新加載到一個新建的數(shù)據(jù)庫newdb中:
$ createdb -T template0 newdb $ pg_restore -d newdb db.dump
注意,這里沒有使用-C選項,而是直接鏈接到將要恢復的數(shù)據(jù)庫上。還要注意的是, 我們從template0而不是template1創(chuàng)建了新數(shù)據(jù)庫一確保干凈。
要對項目重新排序,首先必須轉(zhuǎn)儲歸檔的目錄:
$ pg_restore -l db.dump > db.list
這個文件由一行頭和每個條目一行組成,比如:
; ; Archive created at Mon Sep 14 13:55:39 2009 ; dbname: DBDEMOS ; TOC Entries: 81 ; Compression: 9 ; Dump Version: 1.10-0 ; Format: CUSTOM ; Integer: 4 bytes ; Offset: 8 bytes ; Dumped from database version: 8.3.5 ; Dumped by pg_dump version: 8.3.8 ; ; ; Selected TOC Entries: ; 3; 2615 2200 SCHEMA - public pasha 1861; 0 0 COMMENT - SCHEMA public pasha 1862; 0 0 ACL - public pasha 317; 1247 17715 TYPE public composite pasha 319; 1247 25899 DOMAIN public domain0 pasha
這里分號是注釋分隔符,而行開頭的數(shù)字代表賦給每個項目的內(nèi)部歸檔ID。
文件內(nèi)的行可以注釋、刪除和/或重新排列。比如:
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 db.list db.dump