在Windows 7上,我尝试将本地数据库复制到远程服务器上已存在的空数据库,因此我输入命令
pg_dump -h localhost -U postgres -d postgres | psql -h remotehost -U remoteuser -d dbname -W
我为我的localhost设置了PGPASSWORD
环境变量,我还在C:\Users\Administrator\AppData\Roaming\postgresql\pgpass.conf
中设置了远程服务器的密码,但我仍然需要添加-W
并输入冗长的手动密码,否则我会得到密码验证失败。
PGPASSWORD
和pgpass.conf
中密码之间的关系是什么?我可以在某个地方记录远程服务器的冗长密码,这样我就不需要手动输入了吗?
答案 0 :(得分:2)
PGPASSWORD
覆盖 pgpass.conf
,这就是您看到该行为的原因。
文件陈述(强调我的):
用户家中的文件.pgpass 目录或PGPASSFILE引用的文件可以包含密码 如果连接需要密码(且没有密码),则使用此选项 已另有规定)。
有关详细信息,请参阅Password File doc。
支持两者的一个选项是让批或 cmd 文件包装 psql 命令并设置PGPASSWORD
环境相应的变量,取决于它是本地还是远程主机。
另一种方法是保留多个密码文件并改为设置环境变量PGPASSFILE
。此选项更安全,因为您可以对各种文件设置不同的权限,并且它们不会直接暴露在可共享的环境变量中。
有关详细信息,请参阅Environment Variable doc。
修改强>
正如Richard Huxton在下面的评论中提到的,两个密码也可以放在同一个密码文件中。