Postgresql

Postgresql 備份所有數據庫單獨的文件

  • May 11, 2021

我需要從 PostgreSQL(在 Windows 機器上執行)創建所有數據庫的自動備份。我需要知道是否可以獲得所有數據庫的備份但在單獨的文件上?使用 pg_dumpall 創建一個包含所有數據庫的腳本。但我需要將每個數據庫放在一個單獨的文件中

您可以將 pg_dump 與迭代所有數據庫的批處理腳本結合使用:

我使用這樣的東西來轉儲我的開發數據庫:

@echo off
set PGBINDIR=c:\Program Files\PostgreSQL\13\bin

rem avoid the password and user prompt from pg_dump
set PGHOST=localhost
set PGUSER=postgres
set PGPASSWORD=********
set PGPORT=5432

rem create a text file listing all databases
rem adjust here if you want to exclude a database
"%PGBINDIR%\psql" -X -c "select datname from pg_database where not datistemplate" -A -t -o dblist.txt -d template1

rem dump all user accounts and roles
"%PGBINDIR%\pg_dumpall" --globals-only --file=postgres_globals.sql 

for /f %%i in (dblist.txt) do (
 echo Backing up: %%i
 "%PGBINDIR%\pg_dump" --create --format=c --file=%%i.pgdmp %%i
)

我將上面的@a_horse_with_no_name 的答案轉換為純 bash,這可能對某些人有用。

我現在使用下面的腳本來使用 rsnapshot 備份遠端 postgresql 數據庫,遵循msyql 數據庫的類似方法

這是腳本:

backupdir=/my/backupdir

# backup globals
sudo -u postgres pg_dumpall --globals-only | gzip > $backupdir/postgres_globals.sql.gz

# backup individual databases
for db in `sudo -u postgres psql -t -c "select datname from pg_database where not datistemplate" | grep '\S' | awk '{$1=$1};1'`; do
  sudo -u postgres pg_dump $db | gzip > $backupdir/$db.sql.gz
done

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