我不知道我的设置有什么问题,但是当我尝试连接到数据库时
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:*:远程用户名:远程密码 192.168.1.46:5432:*:本地用户名:本地密码
两个数据库不在同一台机器上。
更新
这似乎是一个 IP 地址解析问题,因为当我使用 'hostaddr=ip_address_here'
尝试 dblink_conncet_u()
时它不起作用。但是当我将主机名而不是 IP 地址放在 .pgpass
文件中,并且在连接字符串中我使用 'host=hostname_here'
时,它工作正常。
最佳答案
现在,db_link()
将作为用户 postgres 在后端服务器进程上运行。
您的 .pgpass
文件是否位于数据库计算机上用户 postgres 的正确位置?
如果不是,您希望人们如何阅读它?
我想你一定错过了什么:
# ls -l /var/lib/postgresql/.pgpass
-rw------- 1 root root 79 Jun 24 08:10 /var/lib/postgresql/.pgpass
(meanwhile, in psql...)
dblinklocal=# SELECT dblink_connect('conn1', 'hostaddr=127.0.0.1 port=5432 dbname=dblinkremote user=testuser');
ERROR: could not establish connection
DETAIL: fe_sendauth: no password supplied
# chown postgres:postgres .pgpass
dblinklocal=# SELECT dblink_connect('conn1', 'hostaddr=127.0.0.1 port=5432 dbname=dblinkremote user=testuser');
dblink_connect
----------------
OK
(1 row)
关于postgresql - dblink 不使用 .pgpass 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37991825/