Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何通过批处理文件中的pg_dump备份所有数据库-postgres_Postgresql_Batch File - Fatal编程技术网

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

Postgresql 如何通过批处理文件中的pg_dump备份所有数据库-postgres,postgresql,batch-file,Postgresql,Batch File,我尝试从postgres备份所有数据库,但我不知道如何在循环中做到这一点。 pg_dumpall对我来说不是个好主意,因为我得到了超过1k的分贝,而且它还会增长 @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/Pos

我尝试从postgres备份所有数据库,但我不知道如何在循环中做到这一点。 pg_dumpall对我来说不是个好主意,因为我得到了超过1k的分贝,而且它还会增长

@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,但这不起作用

请重新检查纸条,我会即时执行。我不记得PGU垃圾场上的-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

这不是确切的答案,但它可能对您有用#获取系统中的数据库列表,排除tempate dbs dbs=$($PSQL-l-t | egrep-v'template[01]'| awk'{print$1}')在windows批处理中不起作用使用数据库列表生成一个txt,并使用-d在(dblist.txt)中添加一个forparameter@FrankNStein你能举个例子吗?我知道应该有一些循环(或不?),但我不知道如何处理that@Pan-皮耶查:我在回答问题时提出了我的建议,评论太简短了