介绍
在这篇博客中,我们将讨论 Postgres 16 中新增的一些更高级的特性。假设您拥有一些 Linux、Postgres 和 SQL 的经验,因为我们不仅要讨论这些新功能,还要讨论如何实现它们。本博客是使用在 Ubuntu 23.04 上运行的 PostgreSQL 16(开发版本)编写的。首先,我将回顾一些背景知识并简要介绍什么是双向复制以及为什么它很重要,然后结束我们如何实现双向逻辑复制。
背景
在开始学习双向逻辑复制之前,我们首先必须了解逻辑复制。
逻辑复制基础知识
逻辑复制从 PostgreSQL 10 开始就得到支持,并在接下来的几年中得到了许多更新和改进。逻辑复制是将复制 表示为数据对象变更事件流。通过这种方式,我们可以仅复制表等对象的特定变更,而不是整个数据库,并跨不同平台和版本流式传输这些变更。这与物理复制形成鲜明对比,物理复制使用精确的块地址,因此仅限于复制整个数据库,并且不能跨平台或版本进行流式传输,因为数据必须在两者中匹配。
图 1:逻辑复制架构概述
逻辑复制还引入了实现 双向副本(Bi-Directional ) 所必需的两个非常重要的元素。它们是发布者和订阅者,你可以将它们视为领导者节点(发布者)和追随者节点(订阅者)。发布者将收集其最近的变更并将它们作为命令的有序列表发送给订阅者。一旦接收到,订阅者就会接受这一