postgresql - dblink 不使用 .pgpass 文件

标签 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:*:远程用户名:远程密码 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/

相关文章:

ruby - 如何在 PostgreSQL 中使用 "LIKE"查询 jsonb 列类型?

postgresql - Redshift PostgreSQL Distinct ON 运算符

sharepoint - 在基于SharePoint表单的身份验证中登录用户名

android - 在 NTAG213 中获取异常

Postgresql全文搜索,将自然数 "01"视为 "1"

postgresql - 如何将行从 STDIN 导入到 Postgresql?

PHP 登录后重定向到所选页面

oracle - 通过 Oracle 的数据库链接运行 SQL Server 存储过程

oracle - 选择并跨dblink插入

MySQL 相当于 PostgreSQL 的 dblink 模块?