pg_dump 把一個數據庫轉儲爲純文本文件或者是其它格式.html
用法:sql
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命令的形式轉儲數據 --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 命令來設置全部權
聯接選項:bash
-d, --dbname=DBNAME 對數據庫 DBNAME備份 -h, --host=主機名 數據庫服務器的主機名或套接字目錄 -p, --port=端口號 數據庫服務器的端口號 -U, --username=名字 以指定的數據庫用戶聯接 -w, --no-password 永遠不提示輸入口令 -W, --password 強制口令提示 (自動) --role=ROLENAME 在轉儲前運行SET ROLE
若是沒有提供數據庫名字, 那麼使用 PGDATABASE
環境變量的數值.服務器
psql是PostgreSQL 的交互式客戶端工具。
使用方法:session
psql [選項]... [數據庫名稱 [用戶名稱]]
通用選項:socket
-c,--command=命令 執行單一命令(SQL或內部指令)而後結束 -d, --dbname=數據庫名稱 指定要鏈接的數據庫 (默認:"l1xnan") -f, --file=文件名 從文件中執行命令而後退出 -l, --list 列出全部可用的數據庫,而後退出 -v, --set=, --variable=NAME=VALUE 設置psql變量NAME爲VALUE (例如,-v ON_ERROR_STOP=1) -V, --version 輸出版本信息, 而後退出 -X, --no-psqlrc 不讀取啓動文檔(~/.psqlrc) -1 ("one"), --single-transaction 做爲一個單一事務來執行命令文件(若是是非交互型的) -?, --help[=options] 顯示此幫助,而後退出 --help=commands 列出反斜線命令,而後退出 --help=variables 列出特殊變量,而後退出
輸入和輸出選項:ide
-a, --echo-all 顯示全部來自於腳本的輸入 -b, --echo-errors 回顯失敗的命令 -e, --echo-queries 顯示發送給服務器的命令 -E, --echo-hidden 顯示內部命令產生的查詢 -L, --log-file=文件名 將會話日誌寫入文件 -n, --no-readline 禁用加強命令行編輯功能(readline) -o, --output=FILENAME 將查詢結果寫入文件(或 |管道) -q, --quiet 以沉默模式運行(不顯示消息,只有查詢結果) -s, --single-step 單步模式 (確認每一個查詢) -S, --single-line 單行模式 (一行就是一條 SQL 命令)
輸出格式選項 :函數
-A, --no-align 使用非對齊表格輸出模式 -F, --field-separator=STRING 爲字段設置分隔符,用於不整齊的輸出(默認:"|") -H, --html HTML 表格輸出模式 -P, --pset=變量[=參數] 設置將變量打印到參數的選項(查閱 \pset 命令) -R, --record-separator=STRING 爲不整齊的輸出設置字錄的分隔符(默認:換行符號) -t, --tuples-only 只打印記錄i -T, --table-attr=文本 設定 HTML 表格標記屬性(例如,寬度,邊界) -x, --expanded 打開擴展表格輸出 -z, --field-separator-zero 爲不整齊的輸出設置字段分隔符爲字節0 -0, --record-separator-zero 爲不整齊的輸出設置記錄分隔符爲字節0
聯接選項:
-h, --host=主機名 數據庫服務器主機或socket目錄(默認:"本地接口") -p, --port=端口 數據庫服務器的端口(默認:"5432") -U, --username=用戶名 指定數據庫用戶名(默認:"l1xnan") -w, --no-password 永遠不提示輸入口令 -W, --password 強制口令提示 (自動)
更多信息,請在psql中輸入 \?
(用於內部指令)或者 \help
(用於SQL命令),或者參考PostgreSQL文檔中的psql章節.
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-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操做 選項 -I, -n, -P, -t, -T, 以及 --section 能夠組合使用和指定 屢次用於選擇多個對象.
若是沒有提供輸入文件名, 則使用標準輸入.
在鏈接 PostgreSQL 數據庫時,若是想不用手動輸入密碼,官方利用密碼文件(Password File)提供了一種解決方案:
~/.pgpass
隱藏文件或者是建立一個環境變量 PGPASSFILE
引用一個含有密碼信息的文件(文件內容同 .pgpass
文件,此處文件名可隨意,隱不隱藏都行)%APPDATA%\postgresql\pgpass.conf
文件( %APPDATA%
指的是用戶配置中的應用數據子目錄)。PGPASSFILE 指定要用於查找的口令文件的名稱。若是沒有設置,默認爲 ~/.pgpass
該文件記錄着鏈接數據庫須要的全部信息,按下面數據格式,每行一條記錄信息:
hostname:port:database:username:password
該文件中能夠有註釋內容,註釋符號是 #
。
前四個字段能夠是肯定的字面值,也可使用通配符 *
匹配全部。
鏈接數據庫的時候,系統自動從前到後遍歷該文件,使用最早匹配到的記錄,所以,當你在文件中使用了通配符 * 的時候,應該優先把最具體的信息放在文件的最前面。
若是記錄信息中包含 :
或 \
這兩個符號,須要對其進行轉義,就是在字符前面加轉義符號 \
。
在 Unix/Linux 系統中 .pgpass
文件權限只能對用戶本身開放,不能對用戶組和其餘人開放,就是說 .pgpass
文件對用戶組和其餘人是"不可讀,不可寫,不可執行"的,一般會賦予 .pgpass 文件權限 600 ,命令以下:
chmod 0600 ~/.pgpass
若是任何一個權限對用戶組或其餘人開放了,該文件就會被忽略。
利用環境變量 PGPASSFILE
引用的文件權限也要知足這個要求,不然一樣會被忽略。
在 Windows 上,該文件被假定存儲在一個安全的目錄中,所以不會進行特別的權限檢查。
至此,數據庫對應的 .pgpass
文件設置完成,之後再鏈接數據庫就不須要手動輸入密碼了,Shell Script 也可以實現真正意義上的自動化管理。
pg_dump --clean -U <username> -d <example_db> -T <exclude_table_name> | gzip > example_db.bak
export PGPASSWORD="123456" pg_dump -U test testdb > /backup/testdb.bak
參見: