PostgreSQL16中的新增功能:双向逻辑复制

PostgreSQL 16黑科技:用逻辑复制实现跨版本零停机迁移 PostgreSQL 16的逻辑复制凭借并行处理、二进制传输等特性,将跨版本迁移的停机时间压缩至秒级。通过精准的复制标识管理、增量数据校验及动态资源调配,企业可在业务无感中完成数据库架构升级。然而,DDL手动同步、大事务拆分等细节仍需人工介入——这或许是零停机时代最后的“人性化壁垒”。 阅读详情

在这篇博客中,我们将深入探讨Postgres 16中引入的一些更高级的新功能。为了更好地理解这些功能,读者应具备一些Linux、Postgres和SQL的基础知识,因为我们将深入探讨这些新功能并指导如何实现它们。

本博客以在Ubuntu 23.04上运行的PostgreSQL 16(开发版)为基础进行编写。首先,我们将介绍一些背景信息,并简要介绍什么是双向复制,以及为什么它很重要,然后介绍我们如何实现双向逻辑复制。

#1 背景

在开始学习双向逻辑复制之前,我们首先必须了解什么是逻辑复制。

#2  逻辑复制的基础知识

从 PostgreSQL 10 就支持逻辑复制功能,并且在接下来的几年中逻辑复制功能已得到广泛应用和持续更新。逻辑复制是复制 (ie. replicating)数据对象的过程,其表示为它们的更改。通过这种方式,我们可以只复制表等对象的特定更改,而不是复制整个数据库,并将这些更改流式传输到不同的平台和版本。与物理复制形成鲜明对比,逻辑复制更注重于抽象层面的数据表示,这使得它能在不同平台和版本之间实现无缝的数据流传输。相比之下,物理复制更依赖于确切的块地址,导致其复制范围局限于整个数据库,且无法跨平台或版本进行数据流传输,因为每个平台或版本的数据结构必须完全匹配。

图片

图1

逻辑复制还引入了理解其双向对应关系所必不可少的两个非常重要的元素:发布者和订阅者,你可以将它们理解为领导者节点(发布者)和跟随者节点(订阅者)的角色。发布者将收集其最近的更改,并将其作为有序的命令列表发送到订阅者。一旦订阅者接收到这一系列命令,就会将其应用于其数据。如果两个数据库最初具有相同的数据,那么订阅者将与发布者保持同步。 

#3 双向复制

现在我们了解了什么是逻辑复制,那么双向复制有什么不同之处呢?简而言之,双向逻辑复制是指复制中的所有节点都同时充当发布者和订阅者。现在,每个数据库都可以处理读写请求,所有的更改都会以流式传输的方式传递给彼此。这就是双向的方面,与之前只有单向变化流动不同,现在变化在两个方向上都进行流动。 

图片

图2

Postgres 16 新添加的地方是它向 WITH 语句添加了一个新参数,用于过滤掉来自特定节点的复制。双向逻辑复制使用此参数 WITH(ORIGIN = NONE),这会过滤掉所有具有非NONE起源的连接的复制。从本质上讲,这只允许复制新添加的数据,您或许可以看到为什么会这样。如果一个数据库插入新数据并将其复制到第二个数据库,则第二个数据库将复制数据并插入该数据,从而触发对原始数据库的另一次复制。我们很快就陷入到无限复制的循环中,这就是为什么需要这个选项来保持一切有限的原因。

#4 好处

双向逻辑复制的主要优势在于,它提供了更多的可用性,既可以满足读请求,也可以满足写请求,因为我们有两个主节点。这对于许多需要强调写操作的应用程序来说尤其有益。

#5 缺点

双向逻辑复制需要一些前提条件才能正常运行,因为它的许多缺点都来自这些特定条件。例如,在设置复制时,每个数据库中的表必须遵循相同的架构、相同的名称和列,否则订阅服务器将无法找到该表。在逻辑复制可以支持复制用于创建表的数据定义语言 (DDL) 之前,用户必须手动执行此操作以确保一致性。

#6 建立

现在我们了解了双向逻辑复制的基础知识,我们可以深入研究如何在两个数据库之间实现它。开始与设置常规逻辑复制非常相似,但在创建发布服务器和订阅服务器时有一个非常重要的区别。

首先,我们将创建两个主数据库,它们将相互跟随:

$ initdb -D database1
$ initdb -D database2

在每个数据库的 postgres.conf 文件中,将每个数据库的way_level设置为逻辑,并为每个数据库指定一个唯一的端口号:

postgres.conf 数据库1
port = 5432
wal_level = logical
postgres.conf 数据库2
port = 5433
wal_level = logical

>>>启动两个数据库:

pg_ctl -D database1 -l database1.log start
pg_ctl -D database2 -l database2.log start

>>>为每个数据库创建发布服务器:

# CREATE PUBLICATION mypub1 FOR TABLE mytable;
# CREATE PUBLICATION mypub2 FOR TABLE mytable;

>>>为每个数据库创建订阅服务器:

# CREATE SUBSCRIPTION mysub1 CONNECTION 'host=127.0.0.1 port=5433 user=postgres dbname=postgres' PUBLICATION mypub2 WITH(ORIGIN = NONE);

# CREATE SUBSCRIPTION mysub2 CONNECTION 'host=127.0.0.1 port=5432 user=postgres dbname=postgres' PUBLICATION mypub1 WITH(ORIGIN = NONE); 

请注意,创建发布者和订阅者的顺序至关重要。首先,我们需要创建发布者,然后才能创建订阅者。为了更直观地理解,请参考图2。每个组件角落的数字表示它们的创建顺序,这有助于确保复制过程的顺利进行。

现在,当任何数据插入任一数据库时,都应在两个节点之间进行同步复制。

#7 结论

在这篇博客中,我们介绍了 PostgreSQL 16 中的新双向逻辑复制功能。首先,我们简要介绍了逻辑复制的背景以及用于同步数据的发布者/订阅者模型。然后,我们讨论了双向逻辑复制的工作原理以及允许其在不触发无限复制循环的情况下运行的新参数。

最后,我们了解了如何在两个主PostgreSQL 数据库之间设置双向复制。通过支持主节点之间的同步,增加可用性和数据持久性对于任何数据库应用程序都应该是轻而易举的。

*参考文献:

C, Vigneshwaran. Bi-Directional Replication Using Origin Filtering in PostgreSQL, Fujitsu, 31 Aug. 2023, www.postgresql.fastware.com/blog/bi-directional-replication-using-origin-filtering-in-postgresql.

原文链接:

https://www.highgo.ca/2023/12/18/new-in-postgresql-16-bi-directional-logical-replication/

PostgreSQL 16.3复制槽配置实战:从物理复制到逻辑复制全指南 复制槽是PostgreSQL主从复制中保障WAL完整性、防止备库因落后而无法追平的关键机制,也是逻辑复制的核心依赖。理解其工作原理、配置参数和监控方法,能有效规避WAL堆积、VACUUM阻塞、主备切换失效等生产事故。本文结合实际案例,系统梳理PostgreSQL 16.3中物理复制槽和逻辑复制槽的创建方式、核心参数调优、故障排查链路,并分享高可用场景下的实践经验,帮助DBA构建稳健的数据复制体系。 阅读详情

相关推荐

PostgreSQL:逻辑复制与物理复制

PostgreSQL的复制体系就像生物进化的活化石,记录着数据同步技术从简单镜像到智能分发的演化轨迹。在物理复制的确定性世界与逻辑复制的概率宇宙之间,我们看到了数据库技术应对不同场景的智慧平衡。随着PostgreSQL 16引入的逻辑复制并行应用(max_logical_replication_workers)和双向逻辑复制实验特性,这场复制革命正开启新的篇章。掌握这些技术,就如同获得在数据洪流中冲浪的智慧桨板,助您在数字时代的浪潮中破浪前行。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 2757

PostgreSQL 16 的新功能:双向逻辑复制

在这篇博客中,我们将讨论 Postgres 16 中新增的一些更高级的特性。假设您拥有一些 Linux、Postgres 和 SQL 的经验,因为我们不仅要讨论这些新功能,还要讨论如何实现它们。本博客是使用在 Ubuntu 23.04 上运行的 PostgreSQL 16(开发版本)编写的。首先,我将回顾一些背景知识并简要介绍什么是双向复制以及为什么它很重要,然后结束我们如何实现双向逻辑复制。

xuejianxinokok的专栏 2120

【PostgreSQL教程】PostgreSQL 16 新特性介绍

PostgreSQL是一个创新的数据管理系统,以其可靠性和健壮性而闻名,得益于全球开发者社区超过25年的开源开发,已经成为各种规模的组织首选的开源关系数据库。

No8g攻城狮的博客 948

PostgreSQL-PG16-逻辑复制-STANDBY

Postgres 16刚刚发布了测试版,我对其中的新功能非常兴奋。该新功能允许从待命服务器进行逻辑复制,用户可以:从只读的待命服务器创建逻辑解码 减轻主服务器的工作负载 采用新的方式为需要在多个系统之间进行数据同步或审核的应用程序提供高可用性 第二个相关且令人兴奋的新功能是,在给定的待命服务器上的复制槽将持久化到将该待命服务器提升为主服务器。这意味着在主服务器故障并将待命服务器提升为主服务器时,复制槽将持久存在,并且之前的待命服务器订阅者不会受到影响。这两个功能结合在一起,极大地提高了。

Java程序员的知识博客 1613

PostgreSQL多主复制Bi-DirectionalReplication.zip

Bi-Directional Replication (BDR) 是 PostgreSQL 的异步多主复制系统,专门为允许地理上分布的集群而设计;支持最多 48 节点(未来版本还可能更多;是一个低开销,低维护技术,分布式数据库。

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月12日-生产期间维护用的双重隔离

生产期间维护用的双重隔离。该程序用于准备将一个或多个双工位设置为维护状态,同时SABRE 3D/3DxT/3D Scimitar保持生产运行。其目的是在不中断生产的情况下将双工位与运行中的设备隔离。

weixin_46735260的博客 574

【亲测免费】 推荐项目:PgLogical - PostgreSQL 的逻辑复制解决方案

是一个开源的 PostgreSQL 扩展,由 2ndQuadrant 公司开发并维护。该项目专注于提供高效、稳定且灵活的逻辑复制功能,使得数据可以在多个 PostgreSQL 数据库之间实时同步,无需依赖物理备份或触发器。 ## 技术分析 ### 核心特性 - **逻辑解码**:PgLogical 利用了 PostgreSQL 自 9.4 版本引入的 `wal2json` 和 `pgoutp...

gitblog_00008的博客 1067

【电磁场计算】磁偶极子在外磁场中的受力

最近在总结电磁场计算公式的时候发现,关于磁偶极子受力的计算公式,在不同文献中的说明有点出入,在此特地写一篇博客澄清一下。

sky4403的博客 7476

PostgreSQL 9.4 BDR(Bi-Directional Replication), LLSR(Logical Log Stream Replication)

非常感谢2ND团队的辛勤付出, PostgreSQL 9.4的逻辑流复制模块BDR已经小有所成, 本文将演示一下bdr的使用. bi-directional replication顾名思义, 就是互相复制的意思(也称为逻辑流复制), 同样需要利用WAL, 目前为单进程, 以后可能会改进到多进程, 不过即使单进程, 也比目前的其他第三方复制快很多(如slo...

weixin_34227447的博客 801

半导体领域知识 - 初级入门

半导体领域知识 - 初级入门 知识问答 1. 一个晶圆上根据芯片的大小,可以生产几百、几千、几万个芯片。如下图: 2. 8寸晶圆指的是什么?5nm工艺指的是什么? 8寸晶圆指的是直径为175mm(17.5cm)的晶圆,下面是6/812/18寸晶圆的尺寸以及相关发展历程。目前拥有12寸线的厂商只有5家,一个12寸晶圆厂的成本需要上百亿美金。 5nm工艺指的是在一个具体的芯片上,有很多微型结构(千万、亿级别的晶体管),这些核心基本单元MOS管的栅极宽度尺寸来衡量工艺的精细程度,如果是5nm就被称为5nm工艺

Hello World! 2万+

DVT Eclipse保姆级入门教程(一)

介绍 waokspace工作区 是Eclipse平台、已安装插件的存储、配置和临时信息的首选项 在工作区可以定义项目,但不需要将源文件导入或者复制到工作区中,可以在项目中指向任何文件夹或者文件; 路径都不要出现中文; 每次启动Eclipse时,都可以创建一个新的工作空间或指定一个现有的工作空间目录; 可以创建许多工作区,每个工作区专用于某种活动。 project项目 首次创建项目时,Eclipse平台会在你指定的目录中创建一个.project项目。 一些插件可能会在项目目录中创建其他信息,例如DVT创

SummerXRT的博客 1万+

PostgreSQL16 的双向逻辑复制

配置 双向逻辑复制具体步骤

平阳坐山龟 1826

MIA文献阅读 —— 深度学习在医学图像分析中的最新进展及临床应用【2024】_再现性;深度学习

coderVAEVAEVAE) (Kingma威林,2014)在概率性的工作方式学习观测数据之间的映射空间x∈Rmx∈R^mx∈Rm 和潜在的空间z∈Rnmnz∈Rn(m>>n)。作为一个潜变量模型,VAEVAEVAE制定这个问题作为观察样品的最大化对数似logpxlog∫px∣zpzdzpx∣zp (x | z)p(x∣z)可以很容易地使用神经网络建模,和pzp (z)

2401_84181704的博客 1243

双向逻辑复制

在这篇博客中,我们将讨论 Postgres 16 中新增的一些更高级的特性。假设您拥有一些 Linux、Postgres 和 SQL 的经验,因为我们不仅要讨论这些新功能,还要讨论如何实现它们。本博客是使用在 Ubuntu 23.04 上运行的 PostgreSQL 16(开发版本)编写的。首先,我将回顾一些背景知识并简要介绍什么是双向复制以及为什么它很重要,然后结束我们如何实现双向逻辑复制。

m0_70731516的博客 1069

ArcGIS基础实战:面数据拓扑创建和错误修改全流程

通过下图的操作我们可以发现,图层的【Shape_Length】和【Shape_Area】字段的数值都发生了改变,表明两个图层重叠的那一部分图斑合并到另一个图班上,其面积会减小、长度会变大(自己重新计算一下也可以得到此验证结果的)。如图【拓扑实验结果】文件夹里右键,新建【文件地理数据库】,并进行命名为【xx拓扑检查】备注:养成良好的命名习惯。然后在【xx拓扑检查】下右键打开【新建要素数据集】,并对数据集进行命名为【XX拓扑】,然后进行下一步设置。在【KK拓扑】数据集上右键,新建【拓扑】。

yuanYW7556的博客 1万+

LVGL(lv_table)

LVGL中的lv_table是一个轻量级表格控件,用于显示行列式文本数据。它支持设置单元格内容/样式、行列调整、事件响应等基础功能,适用于参数配置、数据展示等场景。通过API可快速创建表格,设置行列数、填充数据,并自定义对齐方式与样式。但需注意默认无滚动条、行数限制等问题。该控件适合简单表格需求,复杂交互需结合自定义事件处理。

m0_49476241的博客 1267

PostgreSQL逻辑复制槽功能

下面是简单的实际操作案例 (版本PG16) 注意事项: 1.在数据复制中,需要保持复制中的所有表均有主键,或唯一索引,如表中无这两项,也可以进行逻辑复制但会严重影响性能,或导致逻辑复制报错。下面的命令并不准确,尤其在主库并未有真实的数据变动或插入则这个语句就会产生问题,但如果能保证主库持续有数据,则这个语句可以观察逻辑复制的从库与主库的数据之间的延迟。检查逻辑复制槽的状态,明显active=F 的逻辑复制出现问题,可能是网络,也可能是WAL丢失,或者是订阅端出现问题等等,都需要后续的分析和排除故障。

sql server的专栏 1455

基于YOLO26深度学习框架的人脸识别门禁系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的人脸识别门禁系统实现方法。系统采用YOLO26目标检测算法,通过CSPDarknet53主干网络、特征金字塔结构和注意力机制实现高效人脸检测。研究内容包括数据预处理、模型训练优化和身份验证等关键技术,使用迁移学习策略和CIoU损失函数提升检测精度。该系统可应用于智能安防场景,具有实时性强、识别准确的特点,为门禁管理提供了智能化解决方案。

一键难忘的博客 766

postgresql16 物理复制与逻辑复制的实现和对比

关于使用 PostgreSQL 设置服务器复制以实现各种复制方法的文章到此结束。首先,我们回顾了设置和运行每种方法的实际步骤,然后查看了每种方法功能的高级摘要。

xuejianxinokok的专栏 2124

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

这篇PostgreSQL逻辑复制文章够用了吧?

业务范围:数据库安装部署、日常维护、主备切换、故障处理、性能优化、技术培训等。需要的伙伴或者商业合作请移步 公众号【呆呆的私房菜】获取联系方式。阅读本文可以了解到逻辑复制概念、复制原理、应用场景、使用限制、实战案例以及使用过程中的常见问题及处理方式等内容。

陈泽钦的博客 1198

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

PostgreSQL逻辑复制难题终结者:pglogical让数据同步如此简单

pglogical是一款专为PostgreSQL设计的逻辑流复制扩展,它彻底改变了传统数据同步的复杂模式。作为PostgreSQL逻辑复制的终极解决方案,pglogical提供了高效、灵活且易用的数据复制功能,让数据库管理员和开发人员能够轻松实现跨数据库、跨服务器的数据同步。 ## 🌟 pglogical:PostgreSQL逻辑复制的黄金标准 pglogical 2扩展为PostgreSQ

gitblog_00111的博客 1101

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

PostgreSQL复制技术全解析:从物理复制到逻辑复制的实践指南

PostgreSQL作为企业级数据库的核心组件,其复制技术是构建高可用架构和数据同步解决方案的基础。本文深入剖析PostgreSQL两大复制技术——物理复制与逻辑复制的实现原理、配置方法和应用场景。通过对比分析两者的技术特点,帮助读者根据业务需求选择合适的复制方案。文章包含详细的配置示例、性能优化建议和实际应用案例,为数据库管理员和架构师提供全面的实践指导。

neweastsun的专栏 1415

PG16 逻辑复制

PG逻辑复制,和我想的逻辑复制,有点不一样

cqsztech的博客 1733

PostgreSQL 逻辑复制:CloudNativePG 发布与订阅功能

当数据库集群需要跨版本升级、数据分片或实时分析时,传统物理复制的局限性日益凸显。物理复制(Physical Replication)通过字节级复制实现高可用,但无法满足精细化数据同步需求。而逻辑复制(Logical Replication)作为 PostgreSQL 10+ 引入的革命性特性,通过**发布-订阅(Publish-Subscribe)** 模型实现表级数据同步,成为云原生环境下数据流...

gitblog_00717的博客 932
上一篇: IvorySQL年度总结 | 开源的世界,走下去才有惊喜
下一篇: PostgreSQL 中的 JSON:彻底改变数据库中的数据灵活性
IvorySQL
博客等级 码龄5年 745粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值