我必须自动化我的 postgre 数据库备份。按照我的软件供应商的指示,我尝试使用 pg_dump.exe(见下文)文件进行备份,但这会提示我输入密码。
.\pg_dump.exe -h localhost -p 4432 -U postgres -v -b -F t -f "C:\Backup\Backup.tar" Repo
所以用谷歌搜索并发现根据“https://www.postgresql.org/docs/9.6/libpq-pgpass.html”我可以在'C:\ Users \ User1 \ AppData \ Roaming \中创建一个pgpass.conf文件postgresql\pgpass.conf”是我做的。
然后我尝试在执行 pg_dump 命令之前将 pgpass.conf 文件的数据传递给 env 变量。但它不起作用。我仍然收到输入密码的提示。这是 pgpass.conf 文件的内容: *:*:*:postgres:password
下面是我在 PowerShell 中尝试的代码,
$Env:PGPASSFILE="C:\Users\User1\AppData\Roaming\postgresql\pgpass.conf"
cd "C:\Program Files\Qlik\Sense\Repository\PostgreSQL\9.6\bin"
.\pg_dump.exe -h localhost -p 4432 -U postgres -v -b -F t -f "C:\Backup\Backup.tar" Repo
为什么我仍然被要求输入密码?
当我输入以下代码时
$Env:AppData
我得到以下响应“C:\ Users \ User1 \ AppData \ Roaming”
到处都有关于如何在 UNIX 或命令提示符中使用它的指南,但没有在 powershell 中使用它。任何帮助表示赞赏。另外,如果您能指导我如何保护此密码文件,那就太好了。
出现密码提示时,我无法使用 Windows 任务计划程序自动执行它。
我怀疑您有合适的解决方案,但是,作为通过命令提示符的快速(且不安全)解决方法,您可以使用变量 PGPASSWORD 保存密码,然后运行备份脚本。
示例可能类似于:
SET PGPASSWORD=password
cd "C:\Program Files\Qlik\Sense\Repository\PostgreSQL\9.6\bin" pg_dump.exe -h localhost -p 4432 -U postgres -b -F t -f "d:\qs_backup\QSR_backup.tar" QSR
棒
我还没有让这该死的东西发挥作用,但我确实找到了这个:
-w --no-password 从不发出密码提示。如果服务器需要密码验证并且无法通过其他方式获得密码 例如 .pgpass 文件,连接尝试将失败。这个选项 在没有用户在场的批处理作业和脚本中非常有用 输入密码。
我在调用 pg_dump 时没有看到 -w 参数
我使用 pg_hba 文件来允许连接“信任”(风险较高的方法,但我必须尽快完成工作)。