背景:
两个不同库之间相互访问表数据时,正常情况下难以做到。简单的使用场景就是报表库与应用库的交互。
比如,现在要查询A库下的user表,与B库下的dept表,怎么做关联查询呢!结果是没法做到的。
所以需要在目标库中做一个远程映射表。
解释:
1. 服务器A库(目标数据库)中有 user表,需要这里做查询user表对应的部门数据
2.服务器B库(源数据库)中有 dept表,做为供数使用。
这里需要在目标数据库A中创建连接,将源数据库B中的表映射到A库中,这样A库就可以访问B库的数据了。
一.安装fdw扩展
create extension postgres_fdw;
查询postgres的所有拓展,验证fdw安装成功:
select * from pg_available_extensions;
二、创建远程服务,在目标库中创建连接
CREATE SERVER b_server_11_ml
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '192.168.200.18', port '5432', dbname 'ais_ml',updatable 'true');
CREATE USER MAPPING FOR postgres
SERVER b_server_11_ml
OPTIONS (user 'postgres', password '123');
解释: b_server_11_ml:连接名,'192.168.200.18':数据库所在服务器地址,'5432':数据库端口,'ais_ml':数据库名称
user 'postgres':用户名为postgres, password '123':密码为123。
三、导入远程表模型
IMPORT FOREIGN SCHEMA "public" LIMIT TO (
dept_1,dept_2
)FROM SERVER b_server_11_ml INTO public;
解释:SCHEMA "public":public 指的是源库B所在的SCHEMA。
dept_1,dept_2:指源库B中需要映射的表,多个时使用 ’,‘ 隔开。
b_server_11_ml INTO public:b_server_11_ml指连接名称,public指需要将表映射到目标库B中的SCHEMA
完成后就可以在目标库A中查看到来自源库B中表了,这时就可以做你想要的数据查询了。