清华主页 - 清华新闻 - 综合时讯 - 正文

【PostgreSQL】安装、配置Postgres数据库,使用DBLink进行详细解释

目录。

      • 一、技术背景。
        • 1.1 背景。
        • 1.2 什么是 DBLink。
      • 二、安装配置 DBLink。
        • 2.1 安装 DBLink。
        • 2.2 配置 DBLink。
          • 1. 修改 `postgresql.conf`
          • 2. 修改 `pg_hba.conf`
      • 三、DBLink 使用。
        • 3.1 数据准备。
        • 3.2 DBLink 使用。
          • 1. 创建 DBLink 连接。
          • 2. 使用 DBLink 进行查询。
          • 3. 使用 DBLink 增删改。
          • 4. 使用 DBLink 异步查询。
          • 5. 关闭DBLink 连接。
      • 四、DBLink 可能存在的问题。

一、技术背景。

1.1 背景。

随着业务复杂性的提高和数据规模的增长,越来越多的公司选择垂直或水平地拆分其在线业务数据库,甚至根据业务场景选择不同类型的数据库来满足其业务需求。同时,在每个数据库的例子中,业务数据被“分散”。如何方便地总结和查询这些数据,已成为困扰用户的一大难题。

针对这类问题�我们可以使用基于DBLink的解决方案,用户可以在一个数据库实例中查询多个数据库实例中的数据。

1.2 什么是 DBLink。

Oracle�Link技术c;我们可以登录最后一个Oracle数据库实例,构建一个Oracle数据库示例,DBLink指向另一个远程网络连接。

现在,基本上,DBLink支持主流数据库 操作。

  • DBLink与数据库实例一对应,PostgresQL,PostgreSQL数据库所在的ip+port+database。
  • DBLink可以指向PostgreSQL、SQLServer、MySQL、Oracle等b;
  • 创建dblink时,用户可以获得连接名,操作远端数据库实例;

二、安装配置 DBLink。

我在当地的一个 Windows postgres14数据库安装在计算机上#xff0c;Linux服务器Docker容器中的另一个数据库实例,使用这两个PG 以下所有演示都由数据库实例进行。

2.1 安装 DBLink。

一般我们都在安装 PostgreSQL 在数据库中,无论是二进制包还是源码包󿀌DBLink插件࿰已经有了c;只是这个插件没有嵌入PostgreSQL数据库,PostgreSQL数据库中可用的插件:

select。*。*。from。pg_available_extensions。

;

在这里插入图片描述
执行后发现有很多可用的插件,需要分页显示。 通过 SQL。select * from pg_available_extensions where name like '�link%';

在这里插入图片描述

发现 PostgreSQL数据库提供 DBLink 可安装:

如果您的PG数据库是通过源码编译安装的,这个SQL可能找不到DBLink,此时,您需要切换到PG的源代码包目录,执行以下命令:

cd contrib/dblinkmakemake install。

此时,DBLink插件可以通过上面的SQL查询。

此时,DBLink插件可以通过上面的SQL查询。也可以通过以下方式查询 SQL 查询已安装的PG 插件:select。*。from。

在这里插入图片描述
pg_extension。

;我们可以通过以下方式 SQL 在 PG 安装在数据库中 DBLink 插件:create。

extension dblink。

在这里插入图片描述

;

我们再次查询PG 已安装在数据库中的插件,已经有࿱了a; 2.2 配置 DBLink。找到 PG 数据库的。 postgresql.conf。和。

pg_hba.conf。 这两个配置文件,以下变化󿼌否则创建的 DBLink 远端数据库可能无法访问。

1. 修改。 postgresql.conf。找到。

在这里插入图片描述

listen_address。 配置项,修改成以下效果,保持一切 IP 进行监听。

2. 修改。 pg_hba.conf。修改。

在这里插入图片描述

IPv4 local connections。

配置项,修改成以下效果。

配置项修改后,需要重启 PG 数据库,否则,修改后的配置不起作用。

三、DBLink 使用。 3.1 数据准备。首先,我在远端Linux服务器上的PG数据库中创建了一个名称。

在这里插入图片描述

tsdb。数据库,并登录该数据库:在数据库中创建一个名称。project。表,它包含在表中。 id。,name。这两个字段󿀌字段。

在这里插入图片描述

id。

在这里插入图片描述

为主键。
在此数据表中插入3个数据:

3.2 DBLink 使用。

1. 创建 DBLink 连接。

在这里插入图片描述

在当地postgres数据库中执行以下命令,创建一个 dblink 连接:

SELECT dblink_connect('dblink_test', 'dbname=tsdb host=10.xxx.xxx.xxx port=5433 user=postgres password=xxxxxx'); PG 数据库中的 dblink_connect() 用于创建函数的功能 DBLink 连接的。上面SQL 的用法中。

  • 上面SQL 的用法中。
  • dblink_connect()。

函数有两个参数:

第一个参数:用于指定创建的 DBLink 的名称。该参数可以忽略,如果被忽略,,将创建一个未命名的 DBLink 连接。因为session 只有一个未命名的数据库连接,如果还有其他未命名的DBLink连接󿼌新创造的将会挤出旧的。第二个参数:是创建 连接参数串的DBLink。在这个连接系列中,IP࿰您需要指定数据库所在节点的远程连接c;port#xff00数据库端口号c;dbname￰中使用的数据库名称c;登录数据库所需的帐户和密码。我们可以使用以下内容 SQL 查询当前创建的数据库是什么? DBLink 连接:select。dblink_get_connections。

在这里插入图片描述

(。

)。

;2. 使用 DBLink 进行查询。上一步操作,我已经在本地Windows计算机上了。 PG Linux服务器PG数据库(已在数据库上创建;以下简称远端)DBLink连接,接下来,我在 Windows电脑PG数据库(以下简称本地)操作窗口󿀌远端数据库通过DBLink连接查询。select。select。*。from。dblink。(。'dblink_test','select * from project')。 as。t。(。 id。int。,name。varchar。(。

在这里插入图片描述

32。

)。

)。

在这里插入图片描述

;

你可以看到�我当地的PG 远端PG可以在数据库中找到 数据库中的数据。除此之外,󿀌也可以使用DBLink进行一些复杂的查询操作,例如表连接。

在这里插入图片描述

我先在当地创建了一个表,插入3个数据,本地表结构和数据如下:

然后演示通过 DBLink 远端PG数据库与本地PG数据库进行表连接操作:

SQL:select t.*, e.name from dblink('dblink_test', 'select * from project') as t(id int, name varchar(32)) left join employee e on t.id=e.id;3. 使用 DBLink 增删改。本地实施如下 SQL PG在远端 在数据库中插入数据:select。本地实施如下 SQL PG在远端 在数据库中插入数据:select。dblink_exec。

在这里插入图片描述

(。

在这里插入图片描述

'dblink_test'

,'insert into project (id, name) values (4, ''China Mobile'')')。;此时,我们在远端PG数据库上查看数据验证,发现确实增加了一个新数据。以下SQL࿰在本地实施c;使用DBLink删除远端PGPG 数据库数据:select。dblink_exec。

在这里插入图片描述

(。

在这里插入图片描述

'dblink_test' ,'delete from project where id=4'

)。;这是我们去远端PG数据库确认,相应的数据确实消失了。同样使用更新数据。dblink_exec()。函数,SQL如下:select。dblink_exec。

在这里插入图片描述

(。

在这里插入图片描述

'dblink_test'

,

'update project set name=''China Mobile''where id=3'

)。;远端的PG 也更新了数据库。4. 使用 DBLink 异步查询。如果要操作远端PG, 生产数据库࿰数据库c;读写压力大,我们可以使用DBLink提供的异步查询功能,远端数据库的查询压力可以在一定程度上缓解。在使用DBLink进行异步查询之前�我们可以通过以下SQL 判断当前DBLinknk 连接是否忙于未完成的异步查询:

在这里插入图片描述

select。

dblink_is_busy。

(。'dblink_test')。;返回值为0,表示没有异步查询任务正在进行中。运行如下SQL󿀌在远端数据库中使用DBLink进行异步查询:select。dblink_send_query。

在这里插入图片描述

(。

'dblink_test' ,'select * from project;'

)。;SQL执行后,不会直接返回结果,当系统压力不大时,异步查询将开始执行。可以通过。dblink_get_result()。函数获取异步查询的结果,示例SQL 以下:select。*。from。dblink_get_result。(。 'dblink_test')。as。 t。(。id。int。,name。

在这里插入图片描述

varchar。

(。

32。)。)。;5. 关闭DBLink 连接。使用以下SQL 关闭有命名的DBLink连接:select。dblink_disconnect。

(。

)。;例如,让我们关闭上述创建的连接,执行以下SQL:

在这里插入图片描述

select。 dblink_disconnect。(。'dblink_test')。;

在这里插入图片描述

你可以看到�我们将在这里重新执行 SQL。

select dblink_get_connections();

  • ,可用的DBLink 连接是空的。
  • 但是,下面仍然显示一行记录,感觉应该是PGBUG,因为下面我又断开了。
  • dblink_test。
连接时报错了。四、DBLink 可能存在的问题。不可否认用 DBLINK 在某些方面,它可以带来很多便利c;如跨库查询、临时迁移数据、少数基本表数据同步等,但在以下三个方面仍存在问题:不支持断点续传功能󿀌如果源数据库出现问题(UNDO 不足、TEMP 不足等)、网络问题󿀌需要重新同步数据󿀌涉及效率问题;不支持 DDL,如果࿰是通过大量自定义触发器实现的c;在效率和准确性方面,需要长时间验证,得不偿失b;几年前爆发了 dblink 导致 SCN Headroom 过低问题;

2025-06-24 11:52:32

相关新闻

清华大学新闻中心版权所有,清华大学新闻网编辑部维护,电子信箱: news@tsinghua.edu.cn
Copyright 2001-2020 news.tsinghua.edu.cn. All rights reserved.