柚子快报激活码778899分享:数据库 pgsql:跨库查询

http://yzkb.51969.com/

目录

前提准备

创建dblink连接

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

 

使用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;

柚子快报激活码778899分享:数据库 pgsql:跨库查询

http://yzkb.51969.com/

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。