You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 2012服务器PostgreSQL备份批处理密码输入问题求助

解决PostgreSQL备份脚本弹出密码提示的问题

哈哈,这问题一看就似曾相识!你4年前遇到的应该就是同一个核心错误——脚本里的变量名写错了,导致PostgreSQL的密码配置文件生成无效,所以才会弹出密码提示。

最关键的修复:修正pgpass.conf的变量名

看你脚本里生成pgpass.conf的这一行:

for %%a in (%PGPASS%) do (>"%PGPassFile%" echo %PG_HOST%:%PG_PORT%:%PRODDB%:%PGUSER%:%%~a)

你前面定义的是PGHOST和PGPORT(没有下划线),但这里却用了%PG_HOST%和%PG_PORT%——这俩变量根本没赋值,所以生成的pgpass.conf里主机和端口的位置是空的!PostgreSQL找不到匹配的认证规则,自然会弹出密码框要你输入。

把这行改成下面这样,变量名对应上:

for %%a in (%PGPASS%) do (>"%PGPassFile%" echo %PGHOST%:%PGPORT%:%PRODDB%:%PGUSER%:%%~a)

额外要检查的两个点

1. pgpass.conf的权限必须正确

PostgreSQL对这个密码文件的权限要求特别严:

  • 文件必须在%APPDATA%\postgresql\目录下(你的脚本已经设置对了)
  • 只能给当前执行脚本的用户读写权限,不能给其他用户(比如Everyone、管理员组)任何权限。如果权限不对,PostgreSQL会直接忽略这个文件,照样弹密码提示。

你可以右键pgpass.conf → 属性 → 安全 → 编辑,删掉所有非当前用户的权限条目,只保留当前用户的完全控制权限。

2. 确认pg_hba.conf的认证规则

检查PostgreSQL安装目录下data文件夹里的pg_hba.conf,确保针对localhost的条目认证方式是md5或者scram-sha-256(密码认证),如果是peer或ident,PostgreSQL会尝试用Windows用户身份认证,和pgpass无关,也会触发密码提示。

可选的小优化

脚本里还有个未定义的变量:IF not exist %BACKUPVER% (mkdir %BACKUPDES%\%BACKUPVER%)里的BACKUPVER没设置,会导致创建一个名为%BACKUPVER%的奇怪目录,建议要么补上这个变量的定义,要么删掉这行(如果不需要按版本分备份目录的话)。

修改完之后,先手动跑一遍脚本,然后打开%APPDATA%\postgresql\pgpass.conf确认内容是类似这样的:

localhost:5432:database_name:username:your_password

再执行备份,应该就不会弹密码提示了!

内容的提问来源于stack exchange,提问作者Gerhard Peters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:44:06