目录
pgsql默认不支持垮库查询,mysql可以
核心:dblink插件
pgsql9.6版本以后自带,不需要手动安装
前提准备
创建两个库(dblink_demo1,dblink_demo2)
两个库各有两个表
dblink_demo1: dblink_user(用户表)
dblink_demo2: dblink_role(角色表)
结构大概是这样:
创建dblink连接
--查看当前数据库所有插件
SELECT * FROM pg_extension;
代表当前库有dblink插件
两个库都需要添加插件(dblink_demo1,dblink_demo2)
--为当前数据库添加dblink插件
create extension if not exists dblink;
当前在dblink_demo1库中,建立user表和role的连接
-- 新建连接:dblinktest(会话连接)
select dblink_connect('dblinktest','host=127.0.0.1 dbname=dblink_demo2 user=postgres password=postgres');
第一个参数为连接名称
第二个为连接字符串
host:要连接的主机地址
dbname:要连接的数据库名称
user:数据库用户名
password:数据库密码
-- 查询所有已链接的dblink
select dblink_get_connections();
查询结果会显示当前库所有的dblink连接名称
使用dblink
SELECT * FROM dblink('dblinktest', 'SELECT * FROM dblink_role')
AS ro(id int, name varchar(10))
dblinktest:刚才创建的连接
SELECT * FROM dblink_role :对当前连接执行的sql语句
(id int, name varchar(10)):和当前连接返回数据的结果集保持一致
测试结果
通过user表查询当前用户角色
SELECT * FROM dblink('dblinktest', 'SELECT * FROM dblink_role')
AS ro(id int, relo_name varchar(10))
join dblink_user us on ro.id = us.role;
datagrip工具报红,显示找不到该表,但是问题不大
拓展
删除dblink连接
括号内填连接名称
另一种写法
把dblink的内容直接放在这里也是可以的,效果一样
SELECT * FROM dblink('host=127.0.0.1 dbname=dblink_demo2 user=postgres password=postgres', 'SELECT * FROM dblink_role')
AS ro(id int, relo_name varchar(10))
join dblink_user us on ro.id = us.role;