Postgresql

如何迭代備份postgresql中的所有數據庫?

  • July 30, 2022

我在 postgresql 9.5 中有大量數據庫,我想使用 pg_dump 工具對其進行備份。每個備份都應從相應的數據庫中獲取其名稱。

當我跑步時

SELECT datname FROM pg_database WHERE datistemplate=false and datname!='postgres';

在 psql 終端中,它會正確顯示所有數據庫名稱。我現在的問題是如何在循環內的 pg_dump 中使用它(如果需要,在批處理腳本中),以便每個數據庫都使用其相應的名稱進行備份。

像這樣的東西:

FOR %%d IN ("SELECT datname FROM pg_database WHERE datistemplate=false and datname!='postgres'") DO(
   
   %pgdump% %%d -f %%d.backup
)

當我執行它時,什麼也沒有發生。

我正在使用 Windows 10,非常感謝任何幫助/提示。謝謝你。

這更像是一個 Windows 問題,而不是 Postgres 問題。但以下對我有用:

psql -U postgres -c "\copy (SELECT datname FROM pg_database WHERE NOT datistemplate and datname not in ('postgres')) to dblist.txt"

for /f "tokens=1 delims= " %%i in (dblist.txt) do (
 pg_dump -U postgres -Fc --file=%%i.pgdump %%i
)

引用自:https://dba.stackexchange.com/questions/315033