PostgreSQL邏輯備份

PostgreSQL邏輯備份概述

PostgreSQL中提供了pg_dump、 pg_dumpall命令進(jìn)行數(shù)據(jù)庫(kù)的邏輯備份。 pg_dump與pg_dumpall命令的功能差不多, 只是pg_dumpall是將一個(gè)PostgreSQL數(shù)據(jù)庫(kù)集群全部轉(zhuǎn)儲(chǔ)到一個(gè)腳本文件中, 而pg_dump命令可以選擇一個(gè)數(shù)據(jù)庫(kù)或部分表進(jìn)行備份。 這里不介紹pg_dumpall的使用方法。

使用pg_dump命令甚至可以在數(shù)據(jù)庫(kù)處于使用狀態(tài)時(shí)進(jìn)行完整一致的備份, 它并不阻塞其他用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)(讀或?qū)懀?/p>

pg_dump生成的備份文件可以是一個(gè)SQL腳本文件, 也可以是一個(gè)歸檔文件。 SQL腳本文件是純文本格式的文件, 它包含許多SQL命令, 執(zhí)行這些SQL命令可以重建該數(shù)據(jù)庫(kù)并將之恢復(fù)到保存成腳本時(shí)的狀態(tài)。 使用psql程序來(lái)執(zhí)行該SQL腳本文件即可恢復(fù)數(shù)據(jù),甚至可以在其他機(jī)器或其他硬件體系的機(jī)器上重建該數(shù)據(jù)庫(kù), 對(duì)腳本進(jìn)行適當(dāng)修改后, 還可以在非PostgreSQL數(shù)據(jù)庫(kù)上執(zhí)行該SQL腳本文件來(lái)重建備份的表。 歸檔格式的備份文件必須與pg_restore一起使用來(lái)重建數(shù)據(jù)庫(kù), 這種格式允許pg_restore選擇恢復(fù)哪些數(shù)據(jù), 甚至可以在恢復(fù)之前對(duì)需要恢復(fù)的條目重新排序。 歸檔格式的備份文件也可以設(shè)計(jì)成能夠跨平臺(tái)移植的。

pg_dump生成歸檔格式的備份文件, 然后與pg_restore配合使用, 能提供一種靈活的備份和恢復(fù)機(jī)制。 pg_dump可以將整個(gè)數(shù)據(jù)庫(kù)備份到一個(gè)歸檔格式的備份文件中, 而pg_restore則可以從這個(gè)歸檔格式的備份文件中選擇性地恢復(fù)部分表或數(shù)據(jù)庫(kù)對(duì)象, 而不必恢復(fù)所有的數(shù)據(jù)。 歸檔格式的備份文件又分為兩種, 最靈活的輸出文件格式是“custom”自定義格式(使用命令項(xiàng)參數(shù)“-Fc”來(lái)指定) , 它允許對(duì)歸檔元素進(jìn)行選取和重新排列, 并且默認(rèn)是壓縮的; 另一種是tar格式(使用命令項(xiàng)參數(shù)“-Ft”來(lái)指定) , 這種格式的文件不是壓縮的, 并且加載時(shí)不能重新排序, 但是它也很靈活, 可以用標(biāo)準(zhǔn)UNIX下的tar工具進(jìn)行處
理。 custom自定義格式比較常用。

pg_dump命令和參數(shù)

pg_dump命令的語(yǔ)法格式如下:

pg_dump [connection-option...] [option...] [dbname]

pg_dump連接選項(xiàng)參數(shù)如下:

  • -h host或--host=host: 指定運(yùn)行服務(wù)器的主機(jī)名。 如果以斜杠開(kāi)頭, 則被用作到UNIX域套接字的路徑。 默認(rèn)情況下, 如果設(shè)置了$PGGHOST環(huán)境變量則從此環(huán)境變量中獲取, 否則嘗試一個(gè)UNIX域套接字連接。
  • -p port或--port=port: 指定服務(wù)器正在偵聽(tīng)的TCP端口或本地UNIX域套接字文件的擴(kuò)
    展。 默認(rèn)情況下, 如果設(shè)置了$PGPORT環(huán)境變量則從此環(huán)境變量中獲取, 否則取默認(rèn)端口5432(編譯時(shí)可以修改此默認(rèn)端口) 。
  • -U username或--username=username: 指定要連接的用戶名。
  • -w或--no-password: 從不提示密碼。 如果服務(wù)器請(qǐng)求密碼身份認(rèn)證, 而且密碼不能通過(guò)其他方式(如.pgpass文件) 來(lái)獲得, 則此命令會(huì)導(dǎo)致連接失敗。 該選項(xiàng)常常用于后臺(tái)腳本, 因?yàn)楹笈_(tái)腳本是無(wú)法輸入密碼的。
  • -W或--password: 強(qiáng)制pg_dump在連接到一個(gè)數(shù)據(jù)庫(kù)之前提示密碼。 該選項(xiàng)通常是不重要的, 因?yàn)槿绻?wù)器請(qǐng)求密碼身份認(rèn)證, pg_dump將自動(dòng)提示一個(gè)密碼。 然而, 當(dāng)不提供“-W”選擇時(shí), pg_dump將會(huì)浪費(fèi)一個(gè)連接并試圖找出服務(wù)器是否需要密碼。 在某些情況下, 輸入“-W”可以避免額外的連接嘗試。
  • --role=rolename: 該選項(xiàng)會(huì)導(dǎo)致pg_dump在連接到數(shù)據(jù)庫(kù)之前發(fā)布一個(gè)SET ROLE rolename命令。 這相當(dāng)于切換到另一個(gè)角色。 當(dāng)已驗(yàn)證用戶缺少pg_dump需要的權(quán)限, 但是可以切換到一個(gè)擁有相應(yīng)權(quán)限的角色時(shí), 可以使用該功能。
  • dbname: 指定連接的數(shù)據(jù)庫(kù)名, 實(shí)際上也是要備份的數(shù)據(jù)庫(kù)名。 如果沒(méi)有使用該參數(shù), 則使用環(huán)境變量“$PGDATABASE”。 如果$PGDATABASE也未聲明, 那么使用發(fā)起連接的用戶名。

下面的參數(shù)是pg_dump命令專有的, 用來(lái)控制備份哪些表的數(shù)據(jù)以及輸出數(shù)據(jù)的格式:

  • 1) -j,--jobs=NUM: 指定并行導(dǎo)出的并行度。
  • 2) -a或--data-only: 該選項(xiàng)只對(duì)純文本格式有意義。 只輸出數(shù)據(jù), 不輸出數(shù)據(jù)定義的SQL語(yǔ)句。
  • 3) -b或--blobs: 在轉(zhuǎn)儲(chǔ)中是否包含大對(duì)象。 除非指定了選擇性轉(zhuǎn)儲(chǔ)的選項(xiàng)“--schema”“--table”“--schema-only”開(kāi)關(guān), 否則默認(rèn)會(huì)轉(zhuǎn)儲(chǔ)大對(duì)象。 此選項(xiàng)僅用于選擇性轉(zhuǎn)儲(chǔ)時(shí)控制是否轉(zhuǎn)儲(chǔ)大對(duì)象。
  • 4) -c或--clean: 該選項(xiàng)只對(duì)純文本格式有意義。 用于控制輸出的腳本中是否生成清
    理該數(shù)據(jù)庫(kù)對(duì)象的語(yǔ)句( 如drop table命令) 。
  • 5) -C或--create: 該選項(xiàng)只對(duì)純文本格式有意義。 指定腳本中是否輸出一條create database語(yǔ)句和連接到該數(shù)據(jù)庫(kù)的語(yǔ)句。 一般在備份的源數(shù)據(jù)庫(kù)與恢復(fù)的目標(biāo)數(shù)據(jù)庫(kù)的名稱一致時(shí)才指定該參數(shù)。
  • 6) -E encoding或--encoding=encoding: 以指定的字符集編碼創(chuàng)建轉(zhuǎn)儲(chǔ)。 默認(rèn)轉(zhuǎn)儲(chǔ)是依據(jù)數(shù)據(jù)庫(kù)編碼創(chuàng)建的。 如果不指定此參數(shù), 可以通過(guò)設(shè)置環(huán)境變量“$PGCLIENTENCODING”達(dá)到相同的目的。
  • 7) -f file或--file=file: 輸出到指定的文件。 如果沒(méi)有指定此參數(shù), 則輸出到標(biāo)準(zhǔn)輸出。
  • 8) -F format或--format=format: 選擇輸出的格式。 “format”可以是p、 c或t。
    ·“p”是“plain”的意思, 純文本SQL腳本文件的格式, 這是默認(rèn)值。
    ·“c”是“custom”的意思, 輸出一個(gè)適合pg_restore使用的自定義格式存檔。 這是最靈活的輸出格式, 該格式允許手動(dòng)查詢并且可以在pg_restore恢復(fù)時(shí)重排歸檔項(xiàng)的順序。 該格式默認(rèn)是壓縮的。
    ·“t”是“tar”的意思, 輸出一個(gè)適合輸入pg_restore的tar格式的歸檔。 該輸出格式允許手動(dòng)選擇并且可以在恢復(fù)時(shí)重排歸檔項(xiàng)的順序, 但是這個(gè)重排序是有限制的, 表數(shù)據(jù)項(xiàng)的相關(guān)順序在恢復(fù)時(shí)不能更改。 同時(shí), tar格式不支持壓縮, 且對(duì)獨(dú)立表的大小限制為8GB。
  • 9) -n schema或--schema=schema: 只轉(zhuǎn)儲(chǔ)匹配schema模式的內(nèi)容, 包括模式本身及其包含的對(duì)象。 如果沒(méi)有聲明此選項(xiàng), 所有目標(biāo)數(shù)據(jù)庫(kù)中的非系統(tǒng)模式都會(huì)被轉(zhuǎn)儲(chǔ)。 可以使用多個(gè)-n選項(xiàng)指定多個(gè)模式。 同樣, schema參數(shù)將按照psql中的\d命令的規(guī)則( 參見(jiàn)Patterns) 被解釋為匹配模式, 因此可以使用通配符匹配多個(gè)模式。 在使用通配符時(shí), 最好用引號(hào)進(jìn)行界定, 以防Shell對(duì)通配符進(jìn)行擴(kuò)展。
    注:如果指定了-n, 那么pg_dump將不會(huì)轉(zhuǎn)儲(chǔ)模式所依賴的其他數(shù)據(jù)庫(kù)對(duì)象, 因此無(wú)法保證轉(zhuǎn)儲(chǔ)的內(nèi)容一定能夠在另一個(gè)干凈的數(shù)據(jù)庫(kù)中成功恢復(fù)。 非模式對(duì)象, 比如大對(duì)象, 不會(huì)在指定-n時(shí)被轉(zhuǎn)儲(chǔ)。 可以使用--blobs明確要求轉(zhuǎn)儲(chǔ)大對(duì)象。
  • 10) -N schema或--exclude-schema=schema: 不轉(zhuǎn)儲(chǔ)任何匹配schema模式的內(nèi)容。 匹配規(guī)則與“-n”完全相同, 可以指定多個(gè)“-N”以排除多種匹配的模式。 如果同時(shí)指定了-n和-N, 那么將只轉(zhuǎn)儲(chǔ)匹配-n但不匹配-N的模式。 如果指定-N但是不指定-n, 那么匹配-N的模式將不會(huì)被轉(zhuǎn)儲(chǔ)。
  • 11) -o或--oids: 是否為每個(gè)表都輸出對(duì)象標(biāo)識(shí)( OID) 。 如果應(yīng)用中需要OID字段(比如用于外鍵約束) 則使用該選項(xiàng), 否則不應(yīng)使用該選項(xiàng)。
  • 12) -O或--no-owner: 該選項(xiàng)只對(duì)純文本格式有意義, 不把對(duì)象的所有權(quán)設(shè)置為對(duì)應(yīng)源數(shù)據(jù)庫(kù)中的owner。 pg_dump默認(rèn)發(fā)出ALTER OWNER或SET SESSION AUTHORIZATION語(yǔ)句以設(shè)置創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象的所有者。 如果這些腳本將來(lái)沒(méi)有被超級(jí)用戶( 或者擁有腳本中全部對(duì)象的用戶) 運(yùn)行, 會(huì)導(dǎo)致恢復(fù)失敗, 設(shè)置-O選項(xiàng)就是為了讓該腳本可以被任何用戶使用。
  • 13) -s或--schema-only: 只輸出對(duì)象定義( 模式) , 不輸出數(shù)據(jù)。 該選項(xiàng)在備份表結(jié)構(gòu)或在另一個(gè)數(shù)據(jù)庫(kù)上創(chuàng)建相同結(jié)構(gòu)的表時(shí)比較有用。
  • 14) -S username或--superuser=username: 指定關(guān)閉觸發(fā)器時(shí)需要用到的超級(jí)用戶名。它只有在使用了--disable-triggers時(shí)才有影響。 一般情況下, 最好不要輸入該參數(shù), 而是用超級(jí)用戶啟動(dòng)生成的腳本。
  • 15) -t table或--table=table: 只轉(zhuǎn)儲(chǔ)匹配table的表、 視圖、 序列。 可以使用多個(gè)-t選項(xiàng)匹配多個(gè)表。 同樣table參數(shù)將按照psql中\(zhòng)d命令的規(guī)則被解釋為匹配模式, 因此可以使用通配符匹配多個(gè)模式。 在使用通配符時(shí), 最好用引號(hào)進(jìn)行界定, 以防Shell對(duì)通配符進(jìn)行擴(kuò)展。 使用了-t之后, -n和-N選項(xiàng)就失效了, 因?yàn)楸?t選中的表將無(wú)視 -n和-N選項(xiàng)而被轉(zhuǎn)儲(chǔ), 同時(shí)除了表之外的其他對(duì)象也不會(huì)被轉(zhuǎn)儲(chǔ)。
    注:如果指定了-t, 那么pg_dump將不會(huì)轉(zhuǎn)儲(chǔ)選中的表依賴的所有其他數(shù)據(jù)庫(kù)對(duì)象,因此無(wú)法保證轉(zhuǎn)儲(chǔ)出來(lái)的表能在一個(gè)干凈的數(shù)據(jù)庫(kù)中成功恢復(fù)。-t選項(xiàng)與PostgreSQL8.2之前的版本不兼容。 8.2之前的-t tab將轉(zhuǎn)儲(chǔ)所有名為“tab”的表, 但是8.2以上的版本只轉(zhuǎn)儲(chǔ)在默認(rèn)搜索路徑中可見(jiàn)的表。 寫(xiě)成“-t '*.tab'”將等價(jià)于之前版本的行為。 同樣, 必須用“-t sch.tab”而不是之前版本的“-n sch -t tab”選擇特定模式中的表。
  • 16) -T table或--exclude-table=table: 不轉(zhuǎn)儲(chǔ)任何匹配table模式的表。 模式匹配規(guī)則與-t完全相同。 可以指定多個(gè)-T以排除多種匹配的表。 如果同時(shí)指定了-t和-T, 那么將只轉(zhuǎn)儲(chǔ)匹配-t但不匹配-T的表。 如果指定-T但是不指定-t, 那么匹配-T的表將不會(huì)被轉(zhuǎn)儲(chǔ)。
  • 17) -v或--verbose: 執(zhí)行過(guò)程中打印更詳細(xì)的信息。 使用此選項(xiàng)后, pg_dump將輸出詳細(xì)的對(duì)象評(píng)注及轉(zhuǎn)儲(chǔ)文件的啟停時(shí)間和進(jìn)度信息( 輸出到標(biāo)準(zhǔn)錯(cuò)誤上) 。
  • 18) -V或--version: 輸出pg_dump版本并退出。
  • 19) -x或--no-privileges或--no-acl: 禁止轉(zhuǎn)儲(chǔ)訪問(wèn)權(quán)限( grant/revoke命令) 。
  • 20) -Z 0..9或--compress=0..9: 指定要使用的壓縮級(jí)別, “0”表示不壓縮。 對(duì)于自定義歸檔格式, 該參數(shù)指定壓縮的單個(gè)表數(shù)據(jù)段, 并且默認(rèn)用中等水平壓縮。 對(duì)于純文本輸出, 設(shè)置一個(gè)非零的壓縮級(jí)別會(huì)導(dǎo)致全部輸出文件被壓縮; 默認(rèn)不壓縮。 tar歸檔格式目前完全不支持壓縮。
  • 21) --binary-upgrade: 該選項(xiàng)是專為升級(jí)工具準(zhǔn)備的, 其功能可能會(huì)在將來(lái)的版本中有所改變, 因此不要將其用于其他目的。
  • 22) --inserts: 該選項(xiàng)像INSERT命令一樣轉(zhuǎn)儲(chǔ)數(shù)據(jù)。 默認(rèn)使用COPY命令的格式轉(zhuǎn)儲(chǔ)
    數(shù)據(jù), 使用該選項(xiàng)將使恢復(fù)非常緩慢。 該選項(xiàng)主要用于把數(shù)據(jù)加載到非PostgreSQL數(shù)據(jù)庫(kù)。 該選項(xiàng)為每一行生成一個(gè)單獨(dú)的INSERT命令, 如果在數(shù)據(jù)庫(kù)恢復(fù)過(guò)程中遇到一行錯(cuò)誤, 僅會(huì)導(dǎo)致丟失一行數(shù)據(jù)而不是全部表內(nèi)容。 請(qǐng)注意, 若目標(biāo)表列的順序與源表列的順序不一樣, 恢復(fù)操作可能會(huì)完全失敗, 這時(shí)應(yīng)該使用--column-inserts選項(xiàng)。
  • 23) --column-inserts或--attribute-inserts: 該選項(xiàng)像有顯式列名的INSERT命令一樣轉(zhuǎn)儲(chǔ)數(shù)據(jù)(INSERT INTO table(column,...) VALUES...) , 這將使恢復(fù)非常緩慢。 主要用于可以加載到非PostgreSQL數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ)。
  • 24) --disable-dollar-quoting: 該選項(xiàng)關(guān)閉使用美元符界定函數(shù)體。 強(qiáng)制用SQL標(biāo)準(zhǔn)的字符串語(yǔ)法的引號(hào)將函數(shù)體內(nèi)容括起來(lái)。
  • 25) --disable-triggers: 該選項(xiàng)僅對(duì)純文本格式有意義, 只與創(chuàng)建僅有數(shù)據(jù)的轉(zhuǎn)儲(chǔ)相關(guān)。 該選項(xiàng)指定pg_dump在恢復(fù)數(shù)據(jù)時(shí), 臨時(shí)關(guān)閉目標(biāo)表上觸發(fā)器的命令。 如果在表上有參照完整性檢查或者其他觸發(fā)器, 恢復(fù)數(shù)據(jù)時(shí)不想重載它們, 那么就應(yīng)該使用此選項(xiàng)。 目前, 發(fā)出--disable-triggers命令的必須是超級(jí)用戶, 執(zhí)行轉(zhuǎn)儲(chǔ)的腳本時(shí)應(yīng)該用-S執(zhí)行一個(gè)超級(jí)用戶的名稱。
  • 26) --lock-wait-timeout=timeout: 不要永遠(yuǎn)等待在開(kāi)始轉(zhuǎn)儲(chǔ)時(shí)獲取共享表鎖。 相反,如果不能在指定的timeout時(shí)間內(nèi)鎖住一個(gè)表, 那么轉(zhuǎn)儲(chǔ)就會(huì)失敗。 在SET statement_timeout接受的任何格式中都可以聲明超時(shí)。
  • 27) --no-tablespaces: 該選項(xiàng)只對(duì)純文本格式有意義, 不輸出命令來(lái)選擇表空間。 該選項(xiàng)內(nèi), 轉(zhuǎn)儲(chǔ)期間當(dāng)表空間默認(rèn)時(shí), 所有的對(duì)象都會(huì)創(chuàng)建表空間。
  • 28) --use-set-session-authorization: 輸出符合SQL標(biāo)準(zhǔn)的SET SESSION AUTHORIZATION命令而不是ALTER OWNER命令。 這樣可以使轉(zhuǎn)儲(chǔ)更加符合標(biāo)準(zhǔn), 但是如果轉(zhuǎn)儲(chǔ)文件中對(duì)象的歷史信息有問(wèn)題, 那么可能無(wú)法正確恢復(fù)。 并且, 使用SET SESSION AUTHORIZATION的轉(zhuǎn)儲(chǔ)必須有數(shù)據(jù)庫(kù)超級(jí)用戶的權(quán)限, 而ALTER OWNER需要的權(quán)限則低得多。

pg_restore命令和參數(shù)

pg_restore命令的語(yǔ)法格式:

pg_restore [connection-option...] [option...] [filename]

pg_restore的連接參數(shù)與pg_dump基本相同,只是pg_restore使用參數(shù)-d dbname或--dbname=dbname來(lái)連接指定的數(shù)據(jù)庫(kù)。
而pg_dump命令連接到特定的數(shù)據(jù)庫(kù)不是由以“-”或“--”開(kāi)頭的選項(xiàng)參數(shù)來(lái)指定的, 而是直接由最后一個(gè)不帶“-”或“--”的參數(shù)來(lái)指定。
pg_restore最后一個(gè)不帶““-”或“--”的參數(shù)是一個(gè)轉(zhuǎn)儲(chǔ)文件名。

pg_restore的參數(shù):

  • 1) filename: 要恢復(fù)的備份文件的位置。 如果未聲明則使用標(biāo)準(zhǔn)輸入。
  • 2) -a或--data-only: 只恢復(fù)數(shù)據(jù), 而不恢復(fù)表模式(數(shù)據(jù)定義) 。
  • 3) -c或--clean: 創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象前先清理(刪除) 它們。
  • 4) -C或--create: 在恢復(fù)數(shù)據(jù)庫(kù)之前先創(chuàng)建它。
    如果出現(xiàn)該選項(xiàng), 與-d在一起的數(shù)據(jù)庫(kù)名只是用于發(fā)出最初的CREATE DATABASE命令, 所有數(shù)據(jù)都恢復(fù)到名字出現(xiàn)在歸檔中的數(shù)據(jù)庫(kù)中。
  • 5) -d dbname或--dbname=dbname: 與數(shù)據(jù)庫(kù)“dbname”連接并且直接恢復(fù)到該數(shù)據(jù)庫(kù)中。
  • 6) -e或--exit-on-error: 如果在向數(shù)據(jù)庫(kù)發(fā)送SQL命令時(shí)遇到錯(cuò)誤, 則退出。
    默認(rèn)是繼續(xù)執(zhí)行, 并且在恢復(fù)結(jié)束時(shí)顯示一個(gè)錯(cuò)誤計(jì)數(shù)。
  • 7) -f filename或--file=filename: 指定生成腳本的輸出文件, 或者出現(xiàn)-l選項(xiàng)時(shí)用于列表的文件, 默認(rèn)是標(biāo)準(zhǔn)輸出。
  • 8) -F format或--format=format: 指定備份文件的格式。
    pg_restore可自動(dòng)判斷格式,如果一定要指定, 值可以是t或c之一。
    其中“t”表示“tar”, 表示備份文件是一個(gè)tar文件。
    “c”表示“custom”, 備份的格式是來(lái)自pg_dump的自定義格式。 這是最靈活的備份格式, 因?yàn)樗试S對(duì)數(shù)據(jù)重新排序, 也允許重載表模式元素。
    默認(rèn)該格式是壓縮的。
  • 9) -I index或--index=index: 只恢復(fù)命名的索引。
  • 10) -j number-of-jobs或--jobs=number-of-jobs: 運(yùn)行pg_restore中最耗時(shí)部分如加載數(shù)據(jù)、 創(chuàng)建索引或創(chuàng)建約束時(shí), 使用多個(gè)并發(fā)工作來(lái)完成。
    該選項(xiàng)可以顯著縮短恢復(fù)時(shí)間。
    每個(gè)并發(fā)工作是一個(gè)進(jìn)程或一個(gè)線程, 且使用一個(gè)單獨(dú)數(shù)據(jù)庫(kù)連接。
    通常選擇一個(gè)大的并發(fā)數(shù)能加快恢復(fù)性能, 但過(guò)高的并發(fā)數(shù)也會(huì)因?yàn)槎秳?dòng)而降低恢復(fù)性能。
    pg_dump的自定義格式才支持該選項(xiàng)。
    輸入文件不能是一個(gè)管道, 必須是一個(gè)常規(guī)文件, 同時(shí), 并發(fā)作業(yè)不能與--single-transaction選項(xiàng)同時(shí)使用。
  • 11) -l或--list: 列出歸檔文件的內(nèi)容。
    該操作的輸出可以用作輸入-L選項(xiàng)。
    請(qǐng)注意如果過(guò)濾選項(xiàng)( 如-n或-t) 與-l一同使用, 將限制列出的項(xiàng)。
  • 12) -L list-file或--use-list=list-file: 僅恢復(fù)list-file中列出的歸檔元素, 并按它們?cè)谖募谐霈F(xiàn)的順序進(jìn)行恢復(fù)。
    請(qǐng)注意, 如果像-n或-t這樣的過(guò)濾開(kāi)關(guān)與-L一起使用, 將進(jìn)一步限制恢復(fù)哪些對(duì)象。
    通常會(huì)通過(guò)運(yùn)行“pg_restore–l”命令創(chuàng)建一個(gè)初始的列表文件, 然后編輯該文件( 刪除或移動(dòng)文件中的行, 或者在行前加一個(gè)分號(hào)注釋掉該行) 。
  • 13) -n namespace或--schema=schema: 只恢復(fù)指定名字模式中的定義和/或數(shù)據(jù)。
    該選項(xiàng)可以與-t選項(xiàng)一起使用, 只恢復(fù)一個(gè)表的數(shù)據(jù)。
  • 14) -O或--no-owner: 不輸出設(shè)置與最初數(shù)據(jù)庫(kù)對(duì)象權(quán)限匹配的命令。
    默認(rèn)情況下,pg_restore發(fā)出ALTER OWNER或SET SESSION AUTHORIZATION語(yǔ)句, 設(shè)置所創(chuàng)建的模
    式元素的所有者權(quán)限。
    如果最初的數(shù)據(jù)庫(kù)連接不是由超級(jí)用戶( 或者是擁有所有創(chuàng)建出來(lái)的對(duì)象的同一個(gè)用戶) 發(fā)起的, 那么這些語(yǔ)句將執(zhí)行失敗。
    如果使用-O, 那么任何用戶都可以用于初始連接, 并且該用戶將擁有創(chuàng)建出來(lái)的所有對(duì)象。
  • 15) --no-tablespaces: 不輸出命令來(lái)選擇表空間。
    使用該選項(xiàng), 恢復(fù)數(shù)據(jù)時(shí), 所有對(duì)象被創(chuàng)建在默認(rèn)表空間中, 而不是對(duì)象原先的表空間。
  • 16) -P function-name(argtype [,...])或--function=function-name(argtype [,...]): 只恢復(fù)指定的命名函數(shù)。
    請(qǐng)注意仔細(xì)拼寫(xiě)函數(shù)名及其參數(shù), 應(yīng)該與備份內(nèi)容列表完全一致。
  • 17) -s或--schema-only: 只恢復(fù)表結(jié)構(gòu)( 數(shù)據(jù)定義) , 不恢復(fù)數(shù)據(jù)( 數(shù)據(jù)表中的內(nèi)容), 序列的當(dāng)前值也不會(huì)得到恢復(fù)。
    請(qǐng)不要與--schema選項(xiàng)混淆。
  • 18) -S username或--superuser=username: 設(shè)置關(guān)閉觸發(fā)器時(shí)聲明超級(jí)用戶的用戶名。
    只有在設(shè)置了--disable-triggers時(shí)才有效。
  • 19) -t table或--table=table: 只恢復(fù)指定的表的定義和/或數(shù)據(jù)。
    可以與-n參數(shù)( 指定schema) 聯(lián)合使用。
  • 20) -T trigger或--trigger=trigger: 只恢復(fù)指定的觸發(fā)器。
  • 21) -v或--verbose: 聲明詳細(xì)模式。
  • 22) -V或--version: 輸出pg_restore版本并退出。
  • 23) -x或--no-privileges或--no-acl: 禁止恢復(fù)訪問(wèn)權(quán)限(grant/revoke命令)。
  • 24) --disable-triggers: 該選項(xiàng)只有在僅恢復(fù)數(shù)據(jù)時(shí)才相關(guān)。
    該選項(xiàng)指示pg_restore在加載數(shù)據(jù)時(shí)執(zhí)行一些命令臨時(shí)關(guān)閉在目標(biāo)表上的觸發(fā)器。
    如果表上有完整性檢查或者其他觸發(fā)器, 而又不希望在加載數(shù)據(jù)時(shí)激活它們, 那么可以使用該選項(xiàng)。
    目前, 只有超級(jí)用戶才能為--disable-triggers發(fā)出命令, 因此, 應(yīng)該用-S聲明一個(gè)超級(jí)用戶名, 最好是以超級(jí)用戶身份運(yùn)行pg_restore。
  • 25) --use-set-session-authorization: 輸出SQL標(biāo)準(zhǔn)的SET SESSION AUTHORIZATION命令, 而不是ALTER OWNER命令。
    這樣可以令轉(zhuǎn)儲(chǔ)與標(biāo)準(zhǔn)兼容得更好, 但是根據(jù)轉(zhuǎn)儲(chǔ)中對(duì)象的歷史, 該轉(zhuǎn)儲(chǔ)可能無(wú)法正確恢復(fù)。
  • 26) --no-data-for-failed-tables: 默認(rèn)情況下, 即使創(chuàng)建表的命令因?yàn)樵摫硪呀?jīng)存在而執(zhí)行失敗, 表中的數(shù)據(jù)仍將被恢復(fù)。
    使用此選項(xiàng)之后, 這些表的數(shù)據(jù)將跳過(guò)恢復(fù)操作。
    當(dāng)目標(biāo)數(shù)據(jù)庫(kù)可能已經(jīng)包含所需恢復(fù)的某些表的內(nèi)容時(shí), 該選項(xiàng)就很有用處了。
    比如, 用于PostgreSQL擴(kuò)展的輔助表( 如PostGIS) 就可能已經(jīng)在目標(biāo)數(shù)據(jù)庫(kù)中恢復(fù)了, 使用該選項(xiàng)就可以防止多次恢復(fù)以致重復(fù)或覆蓋已經(jīng)恢復(fù)的數(shù)據(jù)。
    該選項(xiàng)僅在直接向一個(gè)數(shù)據(jù)庫(kù)中恢復(fù)時(shí)有效, 在生成SQL腳本輸出時(shí)無(wú)效。
  • 27) -1或--single-transaction: 把恢復(fù)操作放到一個(gè)單獨(dú)的事務(wù)中來(lái)執(zhí)行( 也就是把恢復(fù)操作都放在一個(gè)BEGIN/COMMIT事務(wù)塊中封裝發(fā)射命令) , 這就確保了要么所有的命令都成功完成, 要么沒(méi)有恢復(fù)任何數(shù)據(jù), 不會(huì)出現(xiàn)只恢復(fù)了一部分?jǐn)?shù)據(jù)的情況。
    該選項(xiàng)包含--exit-on-error選項(xiàng), 即只要發(fā)生一個(gè)錯(cuò)誤, 所有的操作都會(huì)回滾。

使用示例

運(yùn)行pg_dump命令時(shí)應(yīng)該檢查輸出, 看看是否有警告存在。

常用自定義格式備份:

pg_dump -Fc -h 10.1.x.x -Uwenjiewang hx_main > /data/pgdump/hx_main_20241031.dump

還原前需要將用戶同步創(chuàng)建到新實(shí)例,然后還原,否則會(huì)出現(xiàn)權(quán)限報(bào)錯(cuò):

pg_restore -h 10.2.x.x -Uwenjiewang -d hx_main_newdb /data/pgdump/hx_main_20241031.dump

規(guī)避權(quán)限報(bào)錯(cuò)可參考:

  • 1.目標(biāo)庫(kù)創(chuàng)建角色,跟源庫(kù)保持一致
  • 2.導(dǎo)入時(shí),忽略權(quán)限設(shè)置
pg_restore -d tdb -n tmp --no-owner --no-acl -j2 tmpbak1104

--no-owner:忽略所有者信息
--no-acl:忽略訪問(wèn)控制列表(ACL)信息

  • 3.修改導(dǎo)出的文件,就是保留權(quán)限設(shè)置,但不想創(chuàng)建角色,可以加上 --no-acl 參數(shù)
pg_dump  testdb -n tmp -t tmp.test1 -t tmp.test2 -Fd -j2 --no-acl -f tmpbak1104
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容