關於pg_dump:
- pg_dump -- 將一個PostgreSQL數據庫抽出到一個腳本文件或者其它歸檔文件中。
- pg_dump是一個用於備份PostgreSQL數據庫的實用工具,即使當前數據庫正在使用,也能夠生成一致性的備份,且不會阻塞其他用戶訪問數據庫(包括讀、寫)。
- PostgreSQL提供的一個工具pg_dump,邏輯導出數據,生成sql文件或其他格式文件。
- pg_dump是一個客戶端工具,可以遠程或本地導出邏輯數據,恢復數據至導出時間點。
- pg_dump只能備份一個數據庫
- pg_dump 一次只轉儲一個數據庫,並不會轉儲有關角色或表空間的信息 (因為那些是群集范圍而不是每個數據庫)。。
關於pg_dumpall:
- 如果要備份Cluster中數據庫共有的全局對象,例如角色和表空間,需要使用pg_dumpall。
- 備份文件以文本或存檔文件格式輸出。
- Script dumps是一個普通文本文件,包含將數據庫重構到保存時的狀態所需的SQL命令。
- 要從這樣的腳本恢復,需要將其提供給psql。腳本文件甚至可以用來在其他機器或者其他架構上重構數據庫;進行一些必要的修改,甚至可以在其他數據庫上使用。
- pg_dumpall 在給定的群集中備份每個數據庫, 並保留群集范圍內的數據, 如角色和表空間定義。
關於pg_restore:
- PostgreSQL提供的一個工具pg_restore用來導入數據
1.pg_dump導出整個數據庫
pg_dump -h localhost -U postgres(用戶名) 數據庫名(缺省時同用戶名)>/data/dum.sql
#use
[postgres@cchilei postgres]$pg_dump -h localhost -U postgres test> ~/dum.sql
#特別注意:數據庫名稱:test與'>' 之間不能存在空格
其它導出示例:
# 操作系統平面文件格式
$ pg_dump -h localhost -U postgres -p 5433 -Fp -t test_dump > /tmp/test_dump1.dmp postgres
#自定義格式
$ pg_dump -h localhost -U postgres -p 5433 -Fc -t test_dump > /tmp/test_dump2.dmp postgres
#tar包格式
$ pg_dump -h localhost -U postgres -p 5433 -Ft -t test_dump > /tmp/test_dump3.dmp postgres
#自定義、0級壓縮格式
$ pg_dump -h localhost -U postgres -p 5433 -Fc -Z 0 -t test_dump > /tmp/test_dump4.dmp postgres
#自定義、9級壓縮格式
$ pg_dump -h localhost -U postgres -p 5433 -Fc -Z 9 -t test_dump > /tmp/test_dump5.dmp postgres
#顯示信息內容
$ pg_dump -h localhost -U postgres -p 5433 -Fc -v -t test_dump > /tmp/test_dump6.dmp postgres
2.pg_dump導出某個表
pg_dump -h localhost -U postgres(用戶名) 數據庫名(缺省時同用戶名) -t table(表名) >/data/dum.sql
#use
pg_dump -h localhost -U postgres pgtest -t public.test_table> ~/dum_test_table.sql
#注意:public.test_table中, 'public'是模式名稱, 'test_table'是模式中的表名稱
pg_dump導出某個模式
pg_dump導出public模式:
pg_dump -h localhost -U postgres(用戶名) 數據庫名(缺省時同用戶名) -s public(模式名稱) >/data/dum.sql
[postgres@vmonline ~]$pg_dump -h localhost -U postgres pgtest -s public> /home/lpf/public.sql
2.1 pg_dump 及pgsql配置密碼導出數據
# 數據庫導出 --
psql "host=XX.XX.XX.XX port=5432 user=XXX password=XXX dbname=XXX" -f table_name.sql
#use
pg_dump "host=localhost port=5432 user=postgres password=123456 dbname=pgtest" -f ~/table_name.sql
# ---------------------------------------------------- #
# 數據庫表導出
pg_dump "host=XX.XX.XX.XX port=5432 user=XXXX password=XXXX dbname=XXXXX" -t table_name -f table_name.sql
3.pgsql導入整個數據庫
psql -U postgres(用戶名) 數據庫名(缺省時同用戶名) < /data/dum.sql
#use
[postgres@vmonline ~]$ psql -U postgres pgtest < ~/dum.sql
#pg_restore導入數據庫
pg_restore -h 192.168.0.100 -p 5432 -U postgres -W -d us2011 -v "/root/us2010.backup"
4. pg_dumpall導出及psql恢復
#pg_dumpall導出
su postgres #(需要切換到系統的postgres用戶來進行備份)
pg_dumpall > /backup/all_the_data.backup #(備份整個數據庫集群)
#psql恢復
su postgres
psql -f /backup/all_the_data.backup postgres
exit
pg_restore恢復示例
pg_restore -h 192.168.0.100 -p 5432 -U postgres -W -d us2011 -v "/root/us2010.backup"
pg_restore數據導入工具
[postgres@vmonline ~]$ 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.
pg_dump工具參數
[root@vmonline ~]# 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工具參數
[postgres@vmonline ~]$ 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