暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术干货|dblink本地与远程跨库查询

优炫软件 2021-08-21
946

DBLINK的定义

DBLINK全称database link,是一种数据库之间的单向连接,通常用来创建外部数据库的连接并对外部数据进行DML操作。借助这一特性,也可以用来还原数据库,快速且方便,不用在多个服务器之间来回切换传导数据。

dblink 是UXDB 的一个模块,支持从数据库会话中连接到其他数据库。

安装 dblink

alert user uxdb with superuser;\c template1

CREATE EXTENSION dblink;

select * from ux_available_extensions;

xdb *abc为当前表

CREATE EXTENSION dblink;

登录UXDB数据库,在uxdb=#下

CREATE EXTENSION dblink;

本地跨库访问

首先在 uxdb 中建立 userinfo 表,随后在本地新建一个 localdb 数据库,并在其中建立一个 local_test 数据表。

*建表

CREATE TABLE userinfo (id int primary key, name text);    *插值INSERT INTO userinfo VALUES (1, 'Eric'), (2, 'Tom');*查询一下SELECT * FROM userinfo;*建localdb库CREATE DATABASE localdb;*连接库\c localdb*建表CREATE TABLE local_test (id serial primary key, ival int default 0, create_time timestamptz not null default now());*插值INSERT INTO local_test(ival) VALUES (1), (2), (3), (4);*查询一下SELECT * FROM local_test;

在 uxdb 数据库中查询 local_test 表,就需要使用到 dblink 来访问了。首先,我们通过 dblink_connect 创建一个连接。

SELECT dblink_connect('local_dblink_test','dbname=localdb hostaddr=127.0.0.1 port=5432 user=uxdb password=mypassword');

再通过 dblink 执行查询。

SELECT * FROM dblink('local_dblink_test', 'SELECT * FROM local_test;') AS lt(id int, ival int, create_time timestamptz);

再把返回结果与本库中的表进行联合查询。

SELECT u.id, name, create_time FROM userinfo u JOIN dblink('local_dblink_test', 'SELECT * FROM local_test;') AS lt(id int, ival int, create_time timestamptz) on u.id = lt.id;

可以为dblink创建一个视图。

CREATE VIEW v_localdb_testAS SELECT * FROM dblink('local_dblink_test', 'SELECT * FROM local_test;')AS lt(id int, ival int, create_time timestamptz);

SELECT * FROM v_localdb_test;SELECT u.id, name, create_time FROM userinfo u JOIN v_localdb_test v ON u.id = v.id;

备注:在 local_test 表中 id 字段类型为 serial,但是在通过 dblink 查询时返回的结果类型不能使用 serial 类型。

远端跨库访问

远端跨库访问本质也是类似的,在配置 dblink_connect 连接参数时指明远端数据库的地址、端口、用户名和密码等信息。如:

SELECT dblink_connect('remote_dblink_test', 'dbname=remotedb hostaddr=192.168.10.24 port=5432 user=uxdb password=mypassword');

操作参考上面的<本地跨库访问>

关闭 dblink

当不需要在使用 dblink 访问外部数据库时,我们需要使用 dblink_disconnect 来关闭连接。首先,我们通过 dblink_get_connections 来查看现有的 dblink 连接,随后将其关闭。

SELECT dblink_get_connections();

SELECT dblink_disconnect('remote_dblink_test');SELECT dblink_disconnect('local_dblink_test');

-FIN-

最后修改时间:2021-08-21 09:25:18
文章转载自优炫软件,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论