postgresql - 如何通过批处理文件中的 pg_dump 备份所有数据库 - postgres

标签 postgresql batch-file

我尝试从 postgres 备份所有数据库,但我不知道如何在循环中执行此操作。 pg_dumpall 对我来说不是个好主意,因为我得到了超过 1k DB 并且它会增长。

@echo off

set BASELOG=LOG
set BACKUPDIR=C:/postgres/backups/
set BACKUPDIR2=C:\postgres\backups
set PGHOST=localhost
set PGUSER=postgres
set PGBIN="C:/Program Files/PostgreSQL/9.3/bin/"
set FILELOG=log.txt

set BACKUPDIRDATE="%BACKUPDIR%%date%/"
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
 set dow=%%i
 set month=%%j
 set day=%%k
 set year=%%l
)
if not exist %BACKUPDIRDATE% mkdir %BACKUPDIRDATE%

(
echo Backup start %date%  %time%
%PGBIN%pg_dump -w -i -h %PGHOST% -U %PGUSER% -F c -b -v -f     "%BACKUPDIRDATE%%LOG%.compressed" %BASELOG%
echo End of backup %BASELOG%

FORFILES /p %BACKUPDIR2% /s /D -7 /C "cmd /c rd /S /Q @path"
echo Files are deleted
 )>> %BACKUPDIRDATE%%FILELOG% 2>&1

有人能解释一下如何获取所有数据库的列表然后循环它们吗?

我试过 %PGBIN%psql/list 但这不起作用

最佳答案

请重新检查凭据,我是即时进行的。我不记得 pg_dump 上的 -w 是什么。 通过这种方式,您将为每个数据库获得一个文件。 作为建议,在 Windows 上谈论文件夹路径时,请使用\而不是/ 请原谅我的英语。

@echo off

set BASELOG=LOG
set BACKUPDIR=C:/postgres/backups/
set BACKUPDIR2=C:\postgres\backups
set PGHOST=localhost
set PGUSER=postgres
set PGBIN="C:/Program Files/PostgreSQL/9.3/bin/"
set FILELOG=log.txt

set BACKUPDIRDATE="%BACKUPDIR%%date%/"
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
 set dow=%%i
 set month=%%j
 set day=%%k
 set year=%%l
)
if not exist %BACKUPDIRDATE% mkdir %BACKUPDIRDATE%

(

if exist dbs.lst del dbs.lst
psql -h %PGHOST% -p 5432 -U %PGUSER% -c "SELECT datname FROM pg_database WHERE datistemplate = false;" -o "dbs.lst"

for /f %%a IN (dbs.lst) DO (

    echo Backup start %date%  %time%
    %PGBIN%pg_dump -w -i -h %PGHOST% -U %PGUSER% -F c -b -v -f "%BACKUPDIRDATE%-%%a.compressed" %%a
    echo End of backup %BASELOG%

)

FORFILES /p %BACKUPDIR2% /s /D -7 /C "cmd /c rd /S /Q @path"
echo Files are deleted
 )>> %BACKUPDIRDATE%%FILELOG% 2>&1

关于postgresql - 如何通过批处理文件中的 pg_dump 备份所有数据库 - postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513437/

相关文章:

python - 将 Python 连接到 Heroku PostgreSQL 数据库?

sql - 我如何获得 PostgreSQL 中两个日期之间的季度数?

SQL:从表中选择行序列的最有效方法

batch-file - Inno Setup - 从外部源(文件或文件夹内容)创建组件/类型的动态列表

windows - 当这很容易规避时,powershell 拒绝加载任何本地 ps1 脚本的目的是什么?

windows - 在批处理文件中,如何判断进程是否正在运行?

python - 使用 turbodbc 从 Python 访问 Linux 上的 Postgres

sql - 如何计算两个日期的持续时间?

windows - 如何使用 CMD 命令将文件路径拆分为其组件,并使用双反斜杠再次连接

batch-file - 使用批处理文件临时设置环境变量