dblink不使用.pgpass文件

时间:2016-06-23 12:37:22

标签: postgresql authentication dblink

我不知道我的设置有什么问题,但是当我尝试使用

连接到数据库时
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'它可以正常工作。

1 个答案:

答案 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)