我在查找重复的问题PostgreSQL: Automated Backup in Windows和其他来源https://wiki.postgresql.org/wiki/Automated_Backup_on_Windows。我已经尝试为自己创建一个简单的批处理脚本[例如,设置路径,设置密码...等],以便将来还原数据库。但是,看来我的备份数据库批处理脚本根本不起作用。我不知道我的错误点在哪里。
这是我的备份postgres数据库的批处理脚本。
@echo off
SET PGPASSWORD=%Ech0-5910&123
set root=C:\Program Files (x86)\pgAdmin 4\v3\runtime\
echo on
cd %root%
echo on
pg_dump.exe -h 192.168.1.161 -p 5432 -U postgres -F c -b -v -f "D:\Backup\DatabaseBackUp\SQL\123456.backup" testdb
更新的脚本遵循@Gerhard Barnard的答案
@echo off
echo 192.168.1.161:5432:_wolfcom:postgres:R0m3o^%%Ech0-5910^&>"%APPDATA%\postgresql\pgpass.conf"
set "root=C:\Program Files (x86)\pgAdmin 4\v3\runtime\"
cd /d "%root%"
pg_dump.exe -h 192.168.1.161 -p 5432 -U postgres -F c -b -v -f "D:\Backup\DatabaseBackUp\SQL\123456.backup" _wolfcom
pause
答案 0 :(得分:0)
您的代码应将所有路径都用双引号引起来,以消除空格。请记住,cmd
将每个以空格分隔的工作解释为新命令。我们需要对&
进行转义,因为它将成为批处理的物理操作员,最后,在使用/d
时,如果您来自另一个驱动器号,则最好使用cd
选项:< / p>
@echo off
SET "PGPASSWORD=%Ech0-5910^&123"
set "root=C:\Program Files (x86)\pgAdmin 4\v3\runtime\"
cd /d "%root%"
pg_dump.exe -h 192.168.1.161 -p 5432 -U postgres -F c -b -v -f "D:\Backup\DatabaseBackUp\SQL\123456.backup" testdb
也请注意,您永远不会在pg_dump
命令中使用密码,因此也需要考虑这一点。最佳做法是编辑
%APPDATA%\postgresql\pgpass.conf
并添加
*:5432:*:username:password
自动执行脚本中的该部分:
@echo off
echo *:5432:*:postgres:%Ech0-5910^&123>""%APPDATA%\postgresql\pgpass.conf"
set "root=C:\Program Files (x86)\pgAdmin 4\v3\runtime\"
cd /d "%root%"
pg_dump.exe -h 192.168.1.161 -p 5432 -U postgres -F c -b -v -f "D:\Backup\DatabaseBackUp\SQL\123456.backup" testdb
如果dir
不存在,请创建它"%APPDATA%\postgresql"