pgsql:跨库查询

目录

前提准备

创建dblink连接

测试结果

通过user表查询当前用户角色

拓展

删除dblink连接

另一种写法


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连接名称 

 

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;

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Artij

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值