我的服务器有几个数据库。我希望能够从db2中的查询中读取db1。我知道我可以使用postgres_fdw来做,但这有一些缺点。主要的是我必须传递凭据,担心我何时更改密码等。
答案 0 :(得分:1)
所以你设置服务器,用户映射和创建表:
t=# create server l foreign data wrapper postgres_fdw options (host 'localhost', dbname 't');
CREATE SERVER
t=# create user mapping FOR postgres SERVER l;
CREATE USER MAPPING
t=# create table lt(i serial);
CREATE TABLE
t=# insert into lt default values;
INSERT 0 1
t=# create foreign table ft (i int) server l options(table_name 'lt') ;
CREATE FOREIGN TABLE
t=# select * from ft;
i
---
1
(1 row)
现在如果我在信任本地默认连接之前将md5添加到hba,我得到:
t=# select * from ft;
ERROR: could not connect to server "l"
DETAIL: fe_sendauth: no password supplied
并恢复:
t=# \! sed -i '43s/host/#host/' /pg/d10/pg_hba.conf
t=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
t=# select * from ft;
i
---
1
(1 row)
虽然这行是:
t=# \! sed '43,43!d' /pg/d10/pg_hba.conf
#host all postgres 127.0.0.1/32 md5
所以我的观点是:如果您有本地数据库,默认情况下您不需要操作密码,因为您拥有localhost的同行或信任......
<强>更新强> 所以为了在没有密码的情况下使用localhost你需要一行,比如:
host fdw_db postgres 127.0.0.1/32 trust
走在线前,如:
host all all 127.0.0.1/32 md5
或限制或拒绝连接的任何其他行
https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html
由于pg_hba.conf记录按顺序检查每个记录 连接尝试,记录的顺序是重要的。 通常,较早的记录将具有紧密的连接匹配参数 和较弱的身份验证方法,而后来的记录将有 更宽松的匹配参数和更强的认证方法。对于 例如,人们可能希望对本地TCP / IP使用信任认证 连接但需要密码才能进行远程TCP / IP连接。在 这种情况是指定连接的信任认证的记录 从127.0.0.1开始将出现在指定密码的记录之前 对更广泛的允许客户端IP地址进行身份验证。