我不知道我的设置有什么问题,但是当我尝试使用
连接到数据库时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'
时,它无效。但是当我将主机名放在.pgpass
文件而不是IP地址时,在连接字符串中我使用'host=hostname_here'
它可以正常工作。
答案 0 :(得分:1)
现在,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)