gpt4 book ai didi

postgresql - dblink 不使用 .pgpass 文件

转载 作者:行者123 更新时间:2023-11-29 13:23:16 25 4
gpt4 key购买 nike

我不知道我的设置有什么问题,但是当我尝试连接到数据库时

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com