如何修复Postgres [Window]的自动备份脚本?

时间:2019-05-07 04:27:00

标签: windows postgresql batch-file

我在查找重复的问题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

1 个答案:

答案 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"