我知道在Oracle中可以创建存储的数据库链接,然后在查询中使用它。例如:Postgresql创建存储数据库链接
脚本创造DBLINK:
CREATE PUBLIC DATABASE LINK my_link CONNECT TO my_schema IDENTIFIED BY shema_password USING 'remote';
而在这之后,我们可以在我们的查询中使用它:
SELECT * FROM [email protected]_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连接参数?
我试着用外部表,然后进行下一步的步骤:
创建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.
“*如果服务器不请求密码,非超级用户无法连接*” - 您诚实地运行不需要密码连接的生产服务器? –
@a_horse_with_no_name对不起,但我不忍心。我在用户映射中向远程用户声明了passord(我更新了问题并添加了脚本),而且我已经足够了,或者我错了? – HAYMbl4
错误消息似乎表明您的服务器没有_require_密码。 –