【发布时间】:2016-06-23 12:37:22
【问题描述】:
我不知道我的设置有什么问题,但是当我尝试使用
连接到数据库时psql -h {db address} -U {username} -w {db name}
它工作正常,所以 .pgpass 文件没问题。 但是如果我连接到本地数据库,然后试试这个:
select dblink_connect_u( 'conName', 'hostaddr={address} port={port} dbname={dbName} user={userName} ' );
我得到错误:
ERROR: could not establish connection
DETAIL: fe_sendauth: no password supplied
在连接字符串中有密码,它工作得很好,但我不希望任何人都能看到密码。 知道为什么要这样做吗?
Postgres 版本:9.3
编辑: 操作系统:postgres 正在我的计算机(win7)和远程服务器(Ubuntu 服务器 14.04)上运行。在 Windows 中,pgpass.conf 文件是:Users/Myuser/AppData/Roaming/postgres/pgpass.conf,在 Ubuntu 上:/var/lib/postgres/.pgpass 但我也尝试在本地和远程服务器上使用 Ubuntu,使用相同的 .pgpass 位置,并且 postgres 进程以 postgres 用户身份运行,但结果是一样的。
.pgpass 文件内容:
192.168.1.47:5432:*:remoteusername:remotepassword 192.168.1.46:5432:*:localusername:localpassword
这两个数据库不在同一台机器上。
更新
这似乎是一个 IP 地址解析问题,因为当我尝试使用 dblink_conncet_u() 和 'hostaddr=ip_address_here' 时它不起作用。但是,当我将主机名而不是 IP 地址放在 .pgpass 文件中,并在连接字符串中使用 'host=hostname_here' 时,它工作正常。
【问题讨论】:
-
您没有提供任何重要的细节。 Postgres 版本、操作系统、.pgpass 文件的内容。您是否连接到同一机器上同一端口上的同一数据库集群?等等。
-
@ErwinBrandstetter 你是对的。帖子已更新。
-
.pgpass在哪里?在客户端计算机(运行 SQL 的地方)还是服务器(运行 Postgres 的地方)? -
@a_horse_with_no_name 帖子已编辑。但是 .pgpass 文件没有问题。当我将
psql命令与-w一起使用时。只有dblink_connect_u有这个问题。我知道我可以编辑目标服务器上的 pg_hba.conf 文件以信任我的 IP,但这也不是一个好的解决方案。
标签: postgresql authentication dblink