pg_dump
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命令的形式轉儲資料
--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
環境變數的數值.
psql
psql是PostgreSQL 的互動式客戶端工具。
使用方法:
psql [選項]... [資料庫名稱 [使用者名稱稱]]
通用選項:
-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 列出特殊變數,然後退出
輸入和輸出選項:
-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_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 可以組合使用和指定
多次用於選擇多個物件.
如果沒有提供輸入檔名, 則使用標準輸入.
自動備份
.pgpass
在連線 PostgreSQL 資料庫時,如果想不用手動輸入密碼,官方利用密碼檔案(Password File)提供了一種解決方案:
- Unix/Linux 在使用者目錄建立一個
~/.pgpass
隱藏檔案或者是建立一個環境變數PGPASSFILE
引用一個含有密碼資訊的檔案(檔案內容同.pgpass
檔案,此處檔名可隨意,隱不隱藏都行) - Windows 對應的是
%APPDATA%postgresqlpgpass.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
PGPASSWORD 環境變數
export PGPASSWORD="123456"
pg_dump -U test testdb > /backup/testdb.bak
參見: