Postgresql
如何在單次執行中轉儲同一集群的多個數據庫?
我的集群中有 100 個數據庫。我需要備份 30 個數據庫(作為單個文件或多個文件,什麼都可以)。我可以為使用
pg_dump
with的表格做到這一點-t
。有沒有辦法做這樣的事情(虛擬碼):
pg_dump -d db1 -d db2 -d db3 -Fc > dbs_backup.backup
pg_dump
只能轉儲單個**數據庫。手冊:pg_dump 只轉儲單個數據庫。要備份整個集群,或備份集群中所有數據庫共有的全域對象(例如角色和表空間),請使用pg_dumpall。
Postgres 12將開關添加**
--exclude-database
到pg_dumpall
**. 手冊:
--exclude-database=pattern
不要轉儲名稱與模式匹配的數據庫。
$$ … $$
在Postgres 11 之前,
pg_dumpall
只能轉儲集群中的所有數據庫,即使您在連接字元串中提供了特定的數據庫名稱。手冊:
-d connstr
--dbname=connstr
指定用於連接到伺服器的參數,作為連接字元串。有關詳細資訊,請參閱第 34.1.1 節。
呼叫該選項是
--dbname
為了與其他客戶端應用程序保持一致,但由於 pg_dumpall 需要連接到許多數據庫,連接字元串中的數據庫名稱將被忽略。使用該-l
選項指定用於初始連接的數據庫的名稱,這將轉儲全域對象並發現應轉儲的其他數據庫。要轉儲一些DB,但不是全部,請使用 shell 腳本,就像建議的那樣。您可能希望包含在轉儲中創建每個數據庫的命令:
使用數據庫名稱創建一個 txt 文件,每行一個,如:
db1 db2 db3
等等所有數據庫,然後從外殼:
for a in `cat filename.txt`; do pg_dump -d $a > /tmp/${a}_backup.out; done
由 M.
PS 我無法正確書寫(不明白為什麼),但 filename.txt 必須用“重音”括起來(程式碼 U+0060)