?
本文檔使用
php中文網(wǎng)手冊 發(fā)布
pg_dump [connection-option...] [option...] [dbname]
pg_dump是一個用于備份PostgreSQL 數(shù)據(jù)庫的工具。它甚至可以在數(shù)據(jù)庫正在使用的時候進(jìn)行完整一致的備份。 pg_dump并不阻塞其它用戶對數(shù)據(jù)庫的訪問(讀或者寫)。
轉(zhuǎn)儲格式可以是一個腳本或者歸檔文件。腳本轉(zhuǎn)儲的格式是純文本,它包含許多SQL命令, 這些SQL命令可以用于重建該數(shù)據(jù)庫并將之恢復(fù)到保存成腳本的時候的狀態(tài)。使用 psql從這樣的腳本中恢復(fù)。它們甚至可以用于在其它機(jī)器甚至是其 它硬件體系的機(jī)器上重建該數(shù)據(jù)庫,通過對腳本進(jìn)行一些修改,甚至可以在其它 SQL 數(shù)據(jù) 庫產(chǎn)品上重建該數(shù)據(jù)庫。
歸檔文件格式必須和pg_restore一起使用重建數(shù)據(jù)庫。它們允許 pg_restore對恢復(fù)什么東西進(jìn)行選擇,或者甚至是在恢復(fù) 之前對需要恢復(fù)的條目進(jìn)行重新排序。歸檔文件也是設(shè)計成可以跨平臺移植的。
如果一種候選文件格式和pg_restore結(jié)合,那么 pg_dump就能提供一種靈活的歸檔和傳輸機(jī)制。 pg_dump可以用于備份整個數(shù)據(jù)庫,然后就可以使用 pg_restore檢查這個歸檔和/或選擇要恢復(fù)的數(shù)據(jù)庫部分。 最靈活的輸出文件格式是"custom"(自定義)格式(-Fc)。 它允許對歸檔元素進(jìn)行選取和重新排列,并且缺省時是壓縮的。tar 格式(-Ft)不是壓縮的并且在加載的時候不可能重排列,不過它也很靈活;還有, 它可以用標(biāo)準(zhǔn) Unix 工具(比如tar)進(jìn)行處理。
在運(yùn)行pg_dump的時候,應(yīng)該檢查輸出,看看是否有任何警告存在 (在標(biāo)準(zhǔn)錯誤上打印),特別是下面列出的限制。
下面的命令行參數(shù)控制輸出的內(nèi)容和格式。
將要轉(zhuǎn)儲的數(shù)據(jù)庫名。如果沒有聲明這個參數(shù),那么使用環(huán)境變量PGDATABASE。 如果那個環(huán)境變量也沒聲明,那么使用發(fā)起連接的用戶名。
只輸出數(shù)據(jù),不輸出模式(數(shù)據(jù)定義)。
這個選項只是對純文本格式有意義。對于歸檔格式,可以在調(diào)用pg_restore 的時候聲明該選項。
在轉(zhuǎn)儲中包含大對象。除非指定了--schema,--table,--schema-only 開關(guān),否則這是默認(rèn)行為。因此-b開關(guān)僅用于在選擇性轉(zhuǎn)儲的時候添加大對象。
輸出在創(chuàng)建數(shù)據(jù)庫創(chuàng)建命令之前先清理(drop)該數(shù)據(jù)庫對象的命令。
call pg_restore. 這個選項只是對純文本格式有意義。對于歸檔格式,可以在調(diào)用pg_restore 的時候聲明該選項。
以一條創(chuàng)建該數(shù)據(jù)庫本身并且與這個數(shù)據(jù)庫連接命令開頭進(jìn)行輸出。如果是這種形式的腳本, 那么你在運(yùn)行腳本之前和哪個數(shù)據(jù)庫連接就不重要了。
這個選項只對純文本格式有意義。對于歸檔格式,可以在調(diào)用pg_restore 的時候聲明該選項。
以指定的字符集編碼創(chuàng)建轉(zhuǎn)儲。缺省時,轉(zhuǎn)儲是按照數(shù)據(jù)庫編碼創(chuàng)建的。另外一個獲取同樣結(jié)果 的方法是將PGCLIENTENCODING環(huán)境變量設(shè)置為期望的轉(zhuǎn)儲編碼。
把輸出發(fā)往指定的文件。如果忽略,則使用標(biāo)準(zhǔn)輸出。
選擇輸出的格式。format可以是下列之一:
純文本SQL腳本文件(缺省)
輸出一個適合輸入pg_restore的自定義格式存檔。 這是最靈活的輸出格式,在該格式中允許手動查詢并且可以在還原時重排歸檔項的順序。 該格式缺省是壓縮的。
輸出一個適合輸入pg_restore的tar 格式的歸檔。該輸出格式允許手動選擇并且在還原期間重排歸檔項的順序,但是有一個 限制:表數(shù)據(jù)項的相關(guān)順序在還原時不能更改。同時,tar格式不支持 壓縮并且對獨立表的大小限制為8GB。
一個現(xiàn)在被忽略的棄用選項。
只轉(zhuǎn)儲匹配schema的模式內(nèi)容, 包括模式本身以及其中包含的對象。如果沒有聲明這個選項,所有目標(biāo)數(shù)據(jù)庫中的 非系統(tǒng)模式都會被轉(zhuǎn)儲出來??梢允褂枚鄠€-n選項指定多個模式。同樣, schema參數(shù)將按照psql 的\d命令的規(guī)則(參見Patterns) 被解釋為匹配模式,因此可以使用通配符匹配多個模式。在使用通配符的時候,最好 用引號進(jìn)行界定,以防止 shell 將通配符進(jìn)行擴(kuò)展。
Note: 如果指定了-n,那么pg_dump將不會轉(zhuǎn)儲那些模式 所依賴的其他數(shù)據(jù)庫對象。因此,無法保證轉(zhuǎn)儲出來的內(nèi)容一定能夠在另一個干凈的數(shù)據(jù)庫 中恢復(fù)成功。
Note: 非模式對象(比如大對象)不會在指定-n的時候被轉(zhuǎn)儲出來。你可以使用 --blobs明確要求轉(zhuǎn)儲大對象。
不轉(zhuǎn)儲任何匹配schema的模式內(nèi)容。模式 匹配規(guī)則與-n完全相同??梢灾付ǘ鄠€-N以排除多種匹配的模式。
如果同時指定了-n和-N,那么將只轉(zhuǎn)儲匹配-n但不匹配 -N的模式。如果出現(xiàn)-N但是不出現(xiàn)-n,那么匹配-N 的模式將不會被轉(zhuǎn)儲。
作為數(shù)據(jù)的一部分,為每個表都輸出對象標(biāo)識(OID)。如果你的應(yīng)用需要 OID字段的話(比如在外鍵約束中用到),那么使用這個選項。否則,不應(yīng)該使用這個選項。
不把對象的所有權(quán)設(shè)置為對應(yīng)源數(shù)據(jù)庫。pg_dump默認(rèn)發(fā)出 ALTER OWNER或SET SESSION AUTHORIZATION語句以設(shè)置 創(chuàng)建的數(shù)據(jù)庫對象的所有權(quán)。如果這些腳本將來沒有被超級用戶(或者擁有腳本中全部對象 的用戶)運(yùn)行的話將會失敗。-O選項就是為了讓該腳本可以被任何用戶恢復(fù)并且 將腳本中對象的所有權(quán)賦予該選項指定的用戶。
這個選項只是對純文本格式有意義。對于歸檔格式,在調(diào)用pg_restore 的時候可以聲明該選項。
這個選項已經(jīng)過時,但是出于向下兼容的考慮,仍然接受這個選項。
只輸出對象定義(模式),不輸出數(shù)據(jù)。
指定關(guān)閉觸發(fā)器時需要用到的超級用戶名。它只有使用了--disable-triggers 的時候才有影響。一般情況下最好不要輸入這個參數(shù),而是用超級用戶啟動生成的腳本。
只轉(zhuǎn)儲出匹配table的表、視圖、序列。 可以使用多個-t選項匹配多個表。同樣, table參數(shù)將按照psql 的\d命令的規(guī)則(參見 Patterns)被解釋為匹配模式, 因此可以使用通配符匹配多個模式。在使用通配符的時候,最好用引號進(jìn)行界定,以防止 shell 將通配符進(jìn)行擴(kuò)展。
使用了-t之后,-n和-N選項就失效了。因為被-t 選中的表將無視 -n和-N選項而被轉(zhuǎn)儲,同時除了表之外的其他對象不會被轉(zhuǎn)儲。
Note: 如果指定了-t,那么pg_dump將不會轉(zhuǎn)儲任何 選中的表不依賴的其它數(shù)據(jù)庫對象。因此,無法保證轉(zhuǎn)儲出來的表能在一個干凈的數(shù)據(jù)庫中成功恢復(fù)。
Note: -t選項與PostgreSQL8.2 之前的版本不兼容。 之前的-t tab將轉(zhuǎn)儲所有名為tab的表,但是現(xiàn)在只轉(zhuǎn)儲在默 認(rèn)搜索路徑中可見的表。寫成-t '*.tab'將等價于老版本的行為。同樣, 你必須用-t sch.tab而不是老版本的-n sch -t tab選擇特定模式中的表。
不要轉(zhuǎn)儲任何匹配table模式的表。 模式匹配規(guī)則與-t完全相同??梢灾付ǘ鄠€-T以排除多種匹配的表。
如果同時指定了-t和-T,那么將只轉(zhuǎn)儲匹配-t但不匹配 -T的表。如果出現(xiàn)-T但是不出現(xiàn)-t,那么匹配-T 的表將不會被轉(zhuǎn)儲。
指定冗余模式。這樣將令pg_dump輸出詳細(xì)的對象評注以及轉(zhuǎn)儲 文件的啟停時間和進(jìn)度信息到標(biāo)準(zhǔn)錯誤上。
輸出pg_dump版本并退出。
禁止轉(zhuǎn)儲訪問權(quán)限(grant/revoke 命令)
指定要使用的壓縮級別。0表示不壓縮。對于自定義歸檔格式,這指定壓縮的單個表數(shù)據(jù)段, 并且默認(rèn)是在中等水平壓縮。對于純文本輸出,設(shè)置一個非零的壓縮級別會導(dǎo)致 全部輸出文件被壓縮,盡管已經(jīng)連通了gzip;但默認(rèn)是不壓縮。 tar歸檔格式目前完全不支持壓縮。
這個選項是通過就地升級工具來使用的。不建議也不支持將其用于其他目的。 該選項的性能可能會在將來的版本中有所改變,而不另行通知。
它像INSERT命令(而不是COPY命令)一樣轉(zhuǎn)儲數(shù)據(jù)。 這將使恢復(fù)非常緩慢;主要用于可以加載到非PostgreSQL 數(shù)據(jù)庫的轉(zhuǎn)儲。然而,因為該選項為每一行生成一個單獨的命令,重載一行的錯誤僅導(dǎo)致 丟失行而不是全部表內(nèi)容。請注意恢復(fù)可能會完全失敗,若您已重新安排列順序。 --column-inserts選項相對于列順序變化而言是安全的,盡管慢一些。
它像有顯式列名的INSERT命令一樣轉(zhuǎn)儲數(shù)據(jù)(INSERT INTO table(column, ...) VALUES ...)。這將使恢復(fù)非常緩慢;主要用于可以加載到非PostgreSQL 數(shù)據(jù)庫的轉(zhuǎn)儲。然而,因為該選項為每一行生成一個單獨的命令,重載一行的錯誤僅導(dǎo)致 丟失行而不是全部表內(nèi)容。請注意恢復(fù)可能會完全失敗,若您已重新安排列順序。 --column-inserts選項相對于列順序變化而言是安全的,盡管慢一些。
這個選項關(guān)閉使用美元符界定函數(shù)體。強(qiáng)制它們用 SQL 標(biāo)準(zhǔn)的字符串語法的引號包圍。
這個選項只是和創(chuàng)建僅有數(shù)據(jù)的轉(zhuǎn)儲相關(guān)。它告訴pg_dump包含 在恢復(fù)數(shù)據(jù)時臨時關(guān)閉目標(biāo)表上觸發(fā)器的命令。如果在表上有參照完整性檢查或者其它觸發(fā)器, 而恢復(fù)數(shù)據(jù)的時候不想重載他們,那么就應(yīng)該使用這個選項。
目前,發(fā)出--disable-triggers的命令必須作為超級用戶。所以,你還應(yīng)該用 -S執(zhí)行一個超級用戶的名稱?;蛘咦鳛橐粋€超級用戶最好小心地啟動結(jié)果腳本。
該選項僅對純文本格式有意義。對于歸檔格式,當(dāng)你調(diào)用pg_restore時, 你可以聲明該選項。
不要永遠(yuǎn)等待在開始轉(zhuǎn)儲時獲取共享表鎖。相反,如果不能在指定的 timeout 中鎖住一個表,那么就會失敗。在SET statement_timeout接受的任何格式中 都可以聲明超時。(允許該值按照您轉(zhuǎn)儲的服務(wù)器的情況變化,但一個整數(shù)的毫秒數(shù)卻是所有7.3以后 版本都能接受的。當(dāng)從一個7.3之前的服務(wù)器轉(zhuǎn)儲時,忽略該選項。)
不輸出命令來選擇表空間。在該選項內(nèi),在轉(zhuǎn)期間當(dāng)表空間默認(rèn)時,所有的對象將都會創(chuàng)建。
這個選項只對純文本格式有意義。對于歸檔格式,可以在調(diào)用pg_restore 的時候聲明這個選項。
輸出符合 SQL 標(biāo)準(zhǔn)的SET SESSION AUTHORIZATION命令而不是ALTER OWNER 命令。這樣令轉(zhuǎn)儲更加符合標(biāo)準(zhǔn),但是如果轉(zhuǎn)儲文件中的對象的歷史有些問題,那么可能不能正確恢復(fù)。 并且,使用SET SESSION AUTHORIZATION的轉(zhuǎn)儲需要數(shù)據(jù)庫超級用戶的權(quán)限才能轉(zhuǎn)儲成功, 而ALTER OWNER需要的權(quán)限則低得多。
顯示關(guān)于pg_dump命令行參數(shù)的幫助,并退出。
下面的命令行參數(shù)控制數(shù)據(jù)庫的連接參數(shù)。
指定運(yùn)行服務(wù)器的主機(jī)名。如果數(shù)值以斜杠開頭,則被用作到 Unix 域套接字的路徑。缺省 從PGHOST環(huán)境變量中獲取(如果設(shè)置了的話),否則,嘗試一個 Unix 域套接字連接。
指定服務(wù)器正在偵聽的 TCP 端口或本地 Unix 域套接字文件的擴(kuò)展(描述符)。缺省使用 PGPORT環(huán)境變量(如果設(shè)置了的話),否則,編譯時的缺省值。
要連接的用戶名
從不提示密碼。如果服務(wù)器請求密碼身份認(rèn)證并且一個密碼不能通過其他方式(如.pgpass 文件)來獲得,該鏈接嘗試就會失敗。該選項在沒有用戶可以輸入密碼時對批量作業(yè)和腳本中是有效的。
強(qiáng)制pg_dump在連接到一個數(shù)據(jù)庫之前提示密碼。
該選項從不是至關(guān)重要的,因為,若服務(wù)器請求密碼身份認(rèn)證,pg_dump 將自動提示一個密碼。然而,pg_dump將會浪費一個連接視圖找出 服務(wù)器需要一個密碼。在一些情況下,輸入-W來避免額外的連接嘗試是值得的。
指定一個用于創(chuàng)建轉(zhuǎn)儲的角色名。該選項會導(dǎo)致pg_dump在連接到數(shù)據(jù)庫之后發(fā)布一個 SET ROLE rolename命令。 當(dāng)已驗證的用戶(通過-U指定的)缺少pg_dump需要的權(quán)限,但是可以切換到 一個有請求的權(quán)限的角色時,該選項是有效的。一些安裝有一個反對作為一個超級用戶直接登錄的規(guī)則, 并且使用該選項允許在不違法規(guī)則的情況下轉(zhuǎn)儲。
默認(rèn)連接參數(shù)。
該使用程序,跟大部分其他PostgreSQL實用程序一樣,也使用libpq支持的 環(huán)境變量。
pg_dump在內(nèi)部執(zhí)行SELECT語句。 如果您在運(yùn)行pg_dump上有問題,確保您可以從使用的數(shù)據(jù)庫中 選擇信息,例如:psql。同時,libpq 前端庫使用的任意默認(rèn)連接設(shè)置和環(huán)境變量都將會適用。
pg_dump的數(shù)據(jù)庫活動通常由統(tǒng)計數(shù)據(jù)收集器收集。 若這是不可取的,您可以通過PGOPTIONS或者ALTER USER命令 將track_counts設(shè)置為false。
如果你的數(shù)據(jù)庫給template1數(shù)據(jù)庫增加了任何你自己的東西,那么請注意把 pg_dump的輸出恢復(fù)到一個真正空的數(shù)據(jù)庫中;否則你可能會 收到因為重復(fù)定義所追加的對象而造成的錯誤信息。要制作一個沒有任何本地附屬物的數(shù)據(jù) 庫,可以從template0而不是template1拷貝,比如:
CREATE DATABASE foo WITH TEMPLATE template0;
在進(jìn)行純數(shù)據(jù)轉(zhuǎn)儲并且使用了選項--disable-triggers的時候, pg_dump發(fā)出一些查詢先關(guān)閉用戶表上的觸發(fā)器, 然后插入數(shù)據(jù),插入完成后再打開觸發(fā)器。如果恢復(fù)動作在中間停止,那么系統(tǒng)表 可能就會處于一種錯誤狀態(tài)。
tar 歸檔的成員的大小限制于 8 GB 。這是 tar 文件格式的固有限制。因此這個格式無法用于 任何大小超過這個尺寸的表。tar 歸檔和任何其它輸出格式的總大小是不受限制的,只是可能 會有操作系統(tǒng)的限制。
pg_dump產(chǎn)生的轉(zhuǎn)儲文件不包括優(yōu)化器用于查詢計劃決策的統(tǒng)計數(shù)據(jù)。 所以,從一個轉(zhuǎn)儲文件中恢復(fù)數(shù)據(jù)后運(yùn)行ANALYZE來確保最佳性能是明智的; 參閱Section 23.1.3和Section 23.1.5獲取更多詳細(xì)信息。 轉(zhuǎn)儲文件也不包括任何的ALTER DATABASE ... SET 命令;這些設(shè)置通過 pg_dumpall轉(zhuǎn)儲,連同數(shù)據(jù)庫用戶和其他安裝寬度的設(shè)置。
因為pg_dump是用來將數(shù)據(jù)遷移到PostgreSQL 現(xiàn)版本的,pg_dump的輸出預(yù)計能加載到比 pg_dump版本更新的PostgreSQL服務(wù)器版本。 pg_dump也可以從比其自身版本更老的PostgreSQL服務(wù)器 轉(zhuǎn)儲。(目前,支持后退到7.0版本的服務(wù)器。)然而,pg_dump不能轉(zhuǎn)儲 比其自身主版本更新的PostgreSQL服務(wù)器;它甚至將會拒絕嘗試, 而不是冒險做一個無效的轉(zhuǎn)儲。同時,不能保證pg_dump事務(wù)輸出能加載到 一個較舊的主版本—的服務(wù)器,即使從一個那個版本的服務(wù)器加載也是不可以的。 加載一個轉(zhuǎn)儲文件到一個較舊的服務(wù)器可能需要手動編輯轉(zhuǎn)儲文件來刪除較舊的服務(wù)器不能 理解的語法。
將mydb數(shù)據(jù)庫轉(zhuǎn)儲到一個 SQL 腳本文件:
$ pg_dump mydb > db.sql
將上述腳本導(dǎo)入一個(新建的)數(shù)據(jù)庫newdb:
$ psql -d newdb -f db.sql
將數(shù)據(jù)庫轉(zhuǎn)儲為自定義格式的歸檔文件:
$ pg_dump -Fc mydb > db.dump
將上述歸檔文件導(dǎo)入一個(新建的)數(shù)據(jù)庫newdb:
$ pg_restore -d newdb db.dump
轉(zhuǎn)儲一個名為mytab的表:
$ pg_dump -t mytab mydb > db.sql
轉(zhuǎn)儲detroit模式中所有以emp開頭的表,但是不包括 employee_log表:
$ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
轉(zhuǎn)儲所有以east或west開頭并以gsm結(jié)尾的模式, 但是不包括名字中含有test的模式:
$ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql
同上,不過這一次使用正則表達(dá)式的方法:
$ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql
轉(zhuǎn)儲所有數(shù)據(jù)庫對象,但是不包括名字以ts_開頭的表:
$ pg_dump -T 'ts_*' mydb > db.sql
在-t等選項中指定大寫字母或大小寫混合的名字必須用雙引號界定,否則將被自動轉(zhuǎn) 換為小寫(參見Patterns)。 但是因為雙引號在 shell 中有特殊含義,所以必須將雙引號再放進(jìn)單引號中。這樣一來,要轉(zhuǎn)儲 一個大小寫混合的表名,你就需要像下面這樣:
$ pg_dump -t '"MixedCaseName"' mydb > mytab.sql