PostgreSQL 9.5: 隐藏dblink连接密码

7

我想让你获取另一个数据库中的表格。

我会使用 dblink 来完成这个任务。

步骤:

第 1 步:创建扩展。

CREATE EXTENSION dblink;

第二步:创建dlbink连接字符串。
select dblink_connect('con','host=127.0.0.1 dbname=makdb user=postgres password=postgres');

第三步:
select * from dblink('con','select cola,colb from tbl_test') as tbl(cola int,colb varchar(10));

我的问题: 如何在第二步中隐藏密码?

查询后发现我需要创建一个 .pgpass 文件。但是我卡在如何创建以及在哪一步使用该文件名。


3
你可能想看一下FDW(https://www.postgresql.org/docs/current/static/postgres-fdw.html),而不是使用dblink。在前者中,你只需要一次性指定密码,由可信用户从安全终端执行。然后你可以允许特定角色的用户使用它。 - Fabian Pijcke
3
.pgpass 文件必须在运行 Postgres 的服务器上创建,并且必须位于操作系统用户的 $HOME 目录下,该用户是在其下启动 Postgres 的(通常在 Linux 上为 postgres)。 - user330315
请查看此讨论 https://dev59.com/NqLia4cB1Zd3GeqPoMNn - cheffe
1个回答

5
安装 dblink 扩展:
CREATE EXTENSION dblink;

安装postgres_fdw扩展(可用于访问存储在外部PostgreSQL服务器中的数据):
CREATE EXTENSION postgres_fdw;

创建新的外部服务器连接:
CREATE server myserver foreign data wrapper postgres_fdw
OPTIONS (dbname 'foreign_dbname', host 'foreign_host');

创建一个用户映射,用于最近创建的外部服务器连接和您的数据库。
CREATE USER MAPPING FOR "user_in_current_database"
SERVER myserver OPTIONS (user 'foreign_user', password 'foreign_password');

使用已创建的连接从远程数据库中选择一些字段。请注意,您不再需要使用用户名和密码。

SELECT tmp_table.*
FROM dblink(
             'myserver',
             '
             SELECT field1,
                 field2
             FROM table
             '
         )
         AS tmp_table(
                      field1 TEXT,
                      field2 BIGINT
        );

更多信息:

https://www.postgresql.org/docs/9.5/postgres-fdw.html

https://www.postgresql.org/docs/current/sql-createserver.html

https://www.postgresql.org/docs/current/sql-createusermapping.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接