复制PostgreSQL数据库时,在何处存储本地主机和远程服务器的密码

复制PostgreSQL数据库时,在何处存储本地主机和远程服务器的密码,postgresql,Postgresql,在Windows7上,我尝试将本地数据库复制到远程服务器上已经存在的空数据库,因此键入命令 pg_dump -h localhost -U postgres -d postgres | psql -h remotehost -U remoteuser -d dbname -W 我已经为我的本地主机设置了PGPASSWORD环境变量,我还在C:\Users\Administrator\AppData\Roaming\postgresql\pgpass.conf中设置了远程服务器的密码,但我仍然需

在Windows7上,我尝试将本地数据库复制到远程服务器上已经存在的空数据库,因此键入命令

pg_dump -h localhost -U postgres -d postgres | psql -h remotehost -U remoteuser -d dbname -W
我已经为我的本地主机设置了
PGPASSWORD
环境变量,我还在
C:\Users\Administrator\AppData\Roaming\postgresql\pgpass.conf
中设置了远程服务器的密码,但我仍然需要添加
-W
并手动键入冗长的密码,否则我将导致密码验证失败


PGPASSWORD
pgpass.conf
中的密码之间有什么关系?我可以在某个地方记录远程服务器的长密码,这样我就不需要手动键入了吗?

PGPASSWORD
覆盖了
pgpass.conf
,这就是您看到这种行为的原因

该文件指出(我的重点):

用户主页中的.pgpass文件 目录或PGPASSFILE引用的文件可以包含密码 在连接需要密码(且无密码时使用 已另外指定

有关更多信息,请参阅

支持两者的一个选项是让批处理或cmd文件包装psql命令,并相应地设置
PGPASSWORD
环境变量,这取决于它是本地主机还是远程主机

另一种方法是保留多个密码文件,并设置环境变量
PGPASSFILE
。这两个选项中,此选项更安全,因为您可以对不同的文件设置不同的权限,并且它们不会直接暴露在可共享的环境变量中

有关更多信息,请参阅

编辑:


正如Richard Huxton在下面的评论中提到的,两个密码也可以放在同一个密码文件中。

当然,也可以将两个密码放在同一个密码文件中。