Postgresql创建存储的数据库链接

时间:2017-01-23 09:54:51

标签: sql postgresql dblink

我知道在Oracle中可以创建存储的dblink,然后在查询中使用它。例如:

创建脚本dblink:

CREATE PUBLIC DATABASE LINK my_link CONNECT TO my_schema IDENTIFIED BY shema_password USING 'remote';

之后我们可以在查询中使用它:

SELECT * FROM some_table@my_link;

我没有为Postgres找到相同的解决方案。我不知道我们可以创建命名的dblink连接:

为此,我们必须使用dblink_connect名称参数。但创建命名的dblink将在会话结束后销毁。

或者我们可以为每个查询创建dblink连接:

SELECT *
FROM dblink('host= port= dbname= user= password=',
            'select table_schema, table_name from information_schema.tables where table_schema = ''data''') AS t1 (table_schema TEXT, table_name TEXT);

是否可以在Postgres中创建存储的dblink并在不同的查询中使用它?或者我应该创建一些函数来返回封装它们的dblink connection params?

我尝试使用外表并执行后续步骤:

创建postgres_fdw扩展程序:

CREATE EXTENSION IF NOT EXISTS postgres_fdw;

创建服务器:

CREATE SERVER my_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '-', port '-', dbname '-');

并为用户' sys'创建映射设置远程用户和密码的地方:

CREATE USER MAPPING FOR sys SERVER light_house OPTIONS ( USER 'remote_user', PASSWORD 'remove_password');

GRANT USAGE ON FOREIGN SERVER my_server TO sys;

在架构中创建外表:

CREATE FOREIGN TABLE system.my_local_table (
  colums ..
) SERVER my_server OPTIONS (schema_name 'remote_user', table_name 'remote_table'
);

GRANT SELECT ON TABLE system.home_measurement TO argus_sys;

之后我抓住了下一个例外:

[2F003] ERROR: password is required 
Description: Non-superuser cannot connect if the server does not request a password. 
Help: Target server's authentication method must be changed.

1 个答案:

答案 0 :(得分:2)

您应该使用foreign table

要删除错误消息,请更改远程数据库服务器上的pg_hba.conf文件以使用md5身份验证(不要忘记使用pg_ctl reload重新加载)。< / p>