目录
一、技术背景
1.1 背景
随着业务复杂程度的提高、数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至根据业务场景选择不同的数据库类型以满足其业务需求。与此同时,业务的数据被“散落”在各个数据库实例中。如何方便地对这些数据进行汇总查询,已经成为困扰使用者的一大问题。
针对这类问题,我们可以使用基于DBLink的解决方案,使用者通过在一个数据库实例中就可以查询到多个数据库实例中的数据。
1.2 什么是 DBLink
DBLink技术源于Oracle,我们可以登录上一个Oracle数据库实例,建立一个DBLink指向另一个远程的网络联通的Oracle数据库实例。
现在,基本上主流的数据库都支持DBLink 操作。
- DBLink和数据库实例一一对应,对于PostgreSQL来说,对应的就是PostgreSQL数据库所在的ip+port+database
- DBLink可以指向PostgreSQL、SQLServer、MySQL、Oracle等;
- 使用者可通过创建dblink时获取到的连接名,对远端的数据库实例进行操作;
二、安装配置 DBLink
我在本地的一台 Windows 电脑上装了postgres14数据库,另一个数据库实例在一台Linux服务器的Docker容器中,使用这2个PG 数据库实例进行下面所有的演示。
2.1 安装 DBLink
一般我们在安装 PostgreSQL 数据库的时候,不管是二进制包还是源码包,都已经有了DBLink插件,只是这个插件没有嵌入到PostgreSQL数据库中,我们通过以下命令查看PostgreSQL数据库中可用的插件:
select * from pg_available_extensions;
执行后发现可用的插件非常多,需要分页显示。
通过 SQL select * from pg_available_extensions where name like '%dblink%';
发现 PostgreSQL数据库中提供了 DBLink 可供安装:
如果你的PG数据库是通过源码编译安装的,那么可能通过这个SQL查到的结果发现并没有DBLink,这时你需要切换到PG的源码包目录,执行如下命令:
cd contrib/dblink make make install
这时再通过上面的SQL就可以查询到DBLink插件了。
也可通过以下 SQL 查询已安装的PG 插件:
select * from pg_extension;
我们可以通过以下 SQL 在 PG 数据库中安装 DBLink 插件:
create extension dblink;
我们再查询PG 数据库中已经安装的插件,就已经有了:
2.2 配置 DBLink
找到 PG 数据库的 postgresql.conf
和 pg_hba.conf
这2个配置文件,对他们进行如下更改,否则创建的 DBLink 可能无法访问远端数据库。