Postgresql
Postgresql 備份所有數據庫單獨的文件
我需要從 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