PostgreSQL 數據庫導入導出


前言

PostgreSQL 使用 pg_dump 和 pg_dumpall 進行數據庫的邏輯備份,使用 pg_restore 導入數據,pg_dumpall 是對整個數據庫集群進行備份,pg_dump 可以選擇一個數據庫或者部分表進行備份。

關於 pg_dump:

  • pg_dump 將表結構及數據以 SQL 語句的形式導出到 sql 文件或其他格式文件,恢復數據時,將導出的文件作為輸入,執行其中的 SQL 語句,即可恢復數據。

  • pg_dump 能夠對正在使用的 PostgreSQL 數據庫進行備份,並且不影響正常業務的讀寫。

  • pg_dump 是一個客戶端工具,可以遠程或本地導出邏輯數據,恢復數據至導出時間點。

  • pg_dump 一次只轉儲一個數據庫,並不會轉儲有關角色或表空間的信息 (因為那些是群集范圍而不是每個數據庫)。

關於 pg_dumpall:

  • 如果要備份 Cluster 中數據庫共有的全局對象,例如角色和表空間,需要使用 pg_dumpall。

  • 備份文件以文本或存檔文件格式輸出。

  • Script dumps 是一個普通文本文件,包含將數據庫重構到保存時的狀態所需的 SQL 命令。

  • pg_dumpall 在給定的群集中備份每個數據庫, 並保留群集范圍內的數據, 如角色和表空間定義。

pg_dump 常用參數

  • -h host,指定數據庫主機名,或者IP
  • -p port,指定端口號
  • -U user,指定連接使用的用戶名
  • -W,按提示輸入密碼
  • dbname,指定連接的數據庫名稱,實際上也是要備份的數據庫名稱。
  • -a,–data-only,只導出數據,不導出表結構
  • -c,–clean,是否生成清理該數據庫對象的語句,比如drop table
  • -C,–create,是否輸出一條創建數據庫語句
  • -f file,–file=file,輸出到指定文件中
  • -n schema,–schema=schema,只轉存匹配schema的模式內容
  • -N schema,–exclude-schema=schema,不轉存匹配schema的模式內容
  • -O,–no-owner,不設置導出對象的所有權
  • -s,–schema-only,只導致對象定義模式,不導出數據
  • -t table,–table=table,只轉存匹配到的表,視圖,序列,可以使用多個-t匹配多個表
  • -T table,–exclude-table=table,不轉存匹配到的表。
  • –inserts,使用insert命令形式導出數據,這種方式比默認的copy方式慢很多,但是可用於將數據導入到非PostgreSQL數據庫。
  • –column-inserts,導出的數據,有顯式列名

pg_dump 常用示例

1.1 導出單表數據

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 –inserts > bak.sql

1.2 導出多個表數據

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 -t t2 –inserts > bak.sql

1.3 導出整個數據庫

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db –inserts > bak.sql

1.4 只導出表結構,不導出數據

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -s > bak.sql

1.5 只導出數據,不導出表結構

pg_dump -h 127.0.0.1 -U admin -p 5432 -W db –inserts -a > bak.sql

pg_dump 工具參數

pg_dump --help
pg_dump 把一個數據庫轉儲為純文本文件或者是其它格式.
 
用法:
  pg_dump [選項]... [數據庫名字]
 
一般選項:
  -f, --file=FILENAME          輸出文件或目錄名
  -F, --format=c|d|t|p         輸出文件格式 (定制, 目錄, tar)
                               明文 (默認值))
  -j, --jobs=NUM               執行多個並行任務進行備份轉儲工作
  -v, --verbose                詳細模式
  -V, --version                輸出版本信息,然后退出
  -Z, --compress=0-9           被壓縮格式的壓縮級別
  --lock-wait-timeout=TIMEOUT  在等待表鎖超時后操作失敗
  --no-sync                    do not wait for changes to be written safely to disk
  -?, --help                   顯示此幫助, 然后退出
 
控制輸出內容選項:
  -a, --data-only              只轉儲數據,不包括模式
  -b, --blobs                  在轉儲中包括大對象
  -B, --no-blobs               exclude large objects in dump
  -c, --clean                  在重新創建之前,先清除(刪除)數據庫對象
  -C, --create                 在轉儲中包括命令,以便創建數據庫
  -E, --encoding=ENCODING      轉儲以ENCODING形式編碼的數據
  -n, --schema=SCHEMA          只轉儲指定名稱的模式
  -N, --exclude-schema=SCHEMA  不轉儲已命名的模式
  -o, --oids                   在轉儲中包括 OID
  -O, --no-owner               在明文格式中, 忽略恢復對象所屬者
 
  -s, --schema-only            只轉儲模式, 不包括數據
  -S, --superuser=NAME         在明文格式中使用指定的超級用戶名
  -t, --table=TABLE            只轉儲指定名稱的表
  -T, --exclude-table=TABLE    不轉儲指定名稱的表
  -x, --no-privileges          不要轉儲權限 (grant/revoke)
  --binary-upgrade             只能由升級工具使用
  --column-inserts             以帶有列名的INSERT命令形式轉儲數據
  --disable-dollar-quoting     取消美元 (符號) 引號, 使用 SQL 標准引號
  --disable-triggers           在只恢復數據的過程中禁用觸發器
  --enable-row-security        啟用行安全性(只轉儲用戶能夠訪問的內容)
  --exclude-table-data=TABLE   不轉儲指定名稱的表中的數據
  --if-exists              當刪除對象時使用IF EXISTS
  --inserts                    以INSERT命令,而不是COPY命令的形式轉儲數據
  --load-via-partition-root    load partitions via the root table
  --no-comments                do not dump comments
  --no-publications            do not dump publications
  --no-security-labels         不轉儲安全標簽的分配
  --no-subscriptions           do not dump subscriptions
  --no-synchronized-snapshots  在並行工作集中不使用同步快照
  --no-tablespaces             不轉儲表空間分配信息
  --no-unlogged-table-data     不轉儲沒有日志的表數據
  --quote-all-identifiers      所有標識符加引號,即使不是關鍵字
  --section=SECTION            備份命名的節 (數據前, 數據, 及 數據后)
  --serializable-deferrable   等到備份可以無異常運行
  --snapshot=SNAPSHOT          為轉儲使用給定的快照
  --strict-names               要求每個表和/或schema包括模式以匹配至少一個實體
  --use-set-session-authorization
                               使用 SESSION AUTHORIZATION 命令代替
                ALTER OWNER 命令來設置所有權
 
聯接選項:
  -d, --dbname=DBNAME       對數據庫 DBNAME備份
  -h, --host=主機名        數據庫服務器的主機名或套接字目錄
  -p, --port=端口號        數據庫服務器的端口號
  -U, --username=名字      以指定的數據庫用戶聯接
  -w, --no-password        永遠不提示輸入口令
  -W, --password           強制口令提示 (自動)
  --role=ROLENAME          在轉儲前運行SET ROLE
 
如果沒有提供數據庫名字, 那么使用 PGDATABASE 環境變量
的數值.

pg_dumpall

pg_dump 只能備份單個庫,pg_dumpall 可以備份整個 postgresql 實例中所有的數據,包括角色和表空間定義。

示例如下:

pg_dumpall -h 127.0.0.1 -U admin -p 5432 -W –inserts > bak.sql

pg_dumpall 工具參數

pg_dumpall --help
pg_dumpall 抽取一個 PostgreSQL 數據庫簇進一個 SQL 腳本文件.
 
用法:
  pg_dumpall [選項]...
 
一般選項:
  -f, --file=FILENAME          輸出文件名
  -v, --verbose                詳細模式
  -V, --version                輸出版本信息,然后退出
  --lock-wait-timeout=TIMEOUT  在等待表鎖超時后操作失敗
  -?, --help                   顯示此幫助, 然后退出
 
控制輸出內容選項:
  -a, --data-only              只轉儲數據,不包括模式
  -c, --clean                  在重新創建數據庫前先清除(刪除)數據庫
  -E, --encoding=ENCODING      轉儲以ENCODING形式編碼的數據
  -g, --globals-only           只轉儲全局對象, 不包括數據庫
  -o, --oids                   在轉儲中包括 OID
  -O, --no-owner               不恢復對象所屬者
  -r, --roles-only             只轉儲角色,不包括數據庫或表空間
  -s, --schema-only            只轉儲模式, 不包括數據
  -S, --superuser=NAME         在轉儲中, 指定的超級用戶名
  -t, --tablespaces-only       只轉儲表空間,而不轉儲數據庫或角色
  -x, --no-privileges          不要轉儲權限 (grant/revoke)
  --binary-upgrade             只能由升級工具使用
  --column-inserts             以帶有列名的INSERT命令形式轉儲數據
  --disable-dollar-quoting     取消美元 (符號) 引號, 使用 SQL 標准引號
  --disable-triggers           在只恢復數據的過程中禁用觸發器
  --if-exists              當刪除對象時使用IF EXISTS
  --inserts                    以INSERT命令,而不是COPY命令的形式轉儲數據
  --load-via-partition-root    load partitions via the root table
  --no-comments                do not dump comments
  --no-publications            do not dump publications
  --no-role-passwords          do not dump passwords for roles
  --no-security-labels         不轉儲安全標簽的分配
  --no-subscriptions           do not dump subscriptions
  --no-sync                    do not wait for changes to be written safely to disk
  --no-tablespaces             不轉儲表空間分配信息
  --no-unlogged-table-data     不轉儲沒有日志的表數據
  --quote-all-identifiers      所有標識符加引號,即使不是關鍵字
  --use-set-session-authorization
                               使用 SESSION AUTHORIZATION 命令代替
                ALTER OWNER 命令來設置所有權
 
聯接選項:
  -d, --dbname=CONNSTR        連接數據庫使用的連接串
  -h, --host=主機名        數據庫服務器的主機名或套接字目錄
  -l, --database=DBNAME    另一個缺省數據庫
  -p, --port=端口號        數據庫服務器的端口號
  -U, --username=名字      以指定的數據庫用戶聯接
  -w, --no-password        永遠不提示輸入口令
  -W, --password           強制口令提示 (自動)
  --role=ROLENAME          在轉儲前運行SET ROLE

pg_restore 實例

#pg_restore恢復示例
pg_restore -h 192.168.0.100 -p 5432 -U postgres -W -d us2011 -v "/root/us2010.backup"

也可以直接使用 psql 執行 sql 文件

./psql -d databaseName -U postgres -f /Users/xxx/xx_dump.sql

-d 后面緊跟的為 數據庫名
-U 后面緊跟的為 數據庫用戶名
-f 后面緊跟的為 sql文件路徑,也就是備份的SQL語句。

pg_restore 數據導入工具

pg_restore --help
pg_restore 從一個歸檔中恢復一個由 pg_dump 創建的 PostgreSQL 數據庫.
 
用法:
  pg_restore [選項]... [文件名]
 
一般選項:
  -d, --dbname=名字        連接數據庫名字
  -f, --file=文件名        輸出文件名
  -F, --format=c|d|t       備份文件格式(應該自動進行)
  -l, --list               打印歸檔文件的 TOC 概述
  -v, --verbose            詳細模式
  -V, --version            輸出版本信息, 然后退出
  -?, --help               顯示此幫助, 然后退出
 
恢復控制選項:
  -a, --data-only             只恢復數據, 不包括模式
  -c, --clean                  在重新創建之前,先清除(刪除)數據庫對象
  -C, --create                 創建目標數據庫
  -e, --exit-on-error          發生錯誤退出, 默認為繼續
  -I, --index=NAME             恢復指定名稱的索引
  -j, --jobs=NUM               執行多個並行任務進行恢復工作
  -L, --use-list=FILENAME      從這個文件中使用指定的內容表排序
                               輸出
  -n, --schema=NAME            在這個模式中只恢復對象
  -N, --exclude-schema=NAME    do not restore objects in this schema
  -O, --no-owner               不恢復對象所屬者
  -P, --function=NAME(args)    恢復指定名字的函數
  -s, --schema-only           只恢復模式, 不包括數據
  -S, --superuser=NAME         使用指定的超級用戶來禁用觸發器
  -t, --table=NAME             restore named relation (table, view, etc.)
  -T, --trigger=NAME          恢復指定名字的觸發器
  -x, --no-privileges          跳過處理權限的恢復 (grant/revoke)
  -1, --single-transaction     作為單個事務恢復
  --disable-triggers           在只恢復數據的過程中禁用觸發器
  --enable-row-security        啟用行安全性
  --if-exists              當刪除對象時使用IF EXISTS
  --no-comments                do not restore comments
  --no-data-for-failed-tables  對那些無法創建的表不進行
                               數據恢復
  --no-publications            do not restore publications
  --no-security-labels         不恢復安全標簽信息
  --no-subscriptions           do not restore subscriptions
  --no-tablespaces             不恢復表空間的分配信息
  --section=SECTION            恢復命名節 (數據前、數據及數據后)
  --strict-names               要求每個表和/或schema包括模式以匹配至少一個實體
  --use-set-session-authorization
                               使用 SESSION AUTHORIZATION 命令代替
                ALTER OWNER 命令來設置所有權
 
聯接選項:
  -h, --host=主機名        數據庫服務器的主機名或套接字目錄
  -p, --port=端口號        數據庫服務器的端口號
  -U, --username=名字      以指定的數據庫用戶聯接
  -w, --no-password        永遠不提示輸入口令
  -W, --password           強制口令提示 (自動)
  --role=ROLENAME          在恢復前執行SET ROLE操作
 
The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified
multiple times to select multiple objects.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM