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

这篇具有很好参考价值的文章主要介绍了PostgreSQL16中的新增功能:双向逻辑复制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

#1 背景

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

#2  逻辑复制的基础知识

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

postgresql16中的新增功能: 双向逻辑复制,数据库,postgresql,oracle,开源,开源软件

图1

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

#3 双向复制

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

postgresql16中的新增功能: 双向逻辑复制,数据库,postgresql,oracle,开源,开源软件

图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/文章来源地址https://www.toymoban.com/news/detail-799292.html

到了这里,关于PostgreSQL16中的新增功能:双向逻辑复制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PostgreSQL-16新特性之类型转换测试功能】

    在PostgreSQL里,“::” 符号其实是一个强制类型转换符,作用等同于CAST。 在很多情况下,我们需要将一种数据类型的值转换为另一种数据类型。那么我们就可以使用它来进行转换。 \\\"::\\\"的语法格式为: 举个例子为: CAST的语法格式为: 举个例子为: 除此之外类型转换可以使用

    2024年02月12日
    浏览(45)
  • 新增PostgreSQL数据库管理功能,1Panel开源面板v1.9.3发布

    2024年1月15日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.3版本。 在这一版本中,1Panel新增了PostgreSQL数据库管理功能,并且支持设置PHP运行环境扩展模版。此外,我们进行了30多项功能更新和问题修复。1Panel应用商店新增了3款应用,并且更新了22款应用。感谢社

    2024年01月18日
    浏览(56)
  • PostgreSQL 流复制搭建

    PostgreSQL 流复制(Streaming Replication)是 9.0 提供的一种新的 WAL 传递方法。使用流复制时,每当 Primary 节点 WAL 产生,就会马上传递到 Standby 节点,流复制提供 异步 和 同步 两种模式,同步模式可以保障数据 0 丢失。 1.1 环境介绍 主机名 IP 地址 角色 数据目录 172-16-104-7 172.16.

    2024年02月09日
    浏览(30)
  • postgresql 流复制原理

    这部分纯理论内容,结合配图和数据进程了解流复制的工作逻辑。 PostgreSQL在数据目录下的pg_wal(旧版为pg_xlog)子目录中维护了一个WAL日志文件,该文件用于记录数据库文件的每次改变,这种日志文件机制提供了一种数据库热备份的方案,即:在把数据库使用文件系统的方式备

    2024年01月21日
    浏览(32)
  • PostgreSQL逻辑管理结构

    1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 参数说明如下。 ·OWNER [=] user_name:用于指定新建的数据库属于哪个用 户,如果不指定,新建的数据库就属于当前执行命令的用户。 ·TEMPLATE [=] template:模板名(从哪个模板创建新数据 库),如果不指定,将使用默认模

    2024年02月06日
    浏览(41)
  • PostgreSql 逻辑结构

    Database Cluser : 数据库集簇,一套服务器上安装部署完成的一套PostgreSql。在其中可创建数据库(Database)、用户(User)。 User : 数据库用户,用来连接访问数据库,可通过权限管理,控制其访问不同的数据。 Database : 数据库,数据库集簇(Database Cluser)下的逻辑隔离,一个数据

    2024年02月12日
    浏览(28)
  • PostgreSQL 16新特性预览

    PostgreSQL 全球开发组于 2023-05-25 发布了 PostgreSQL 16 的第一个 beta 版本,可以下载试用。虽然细节可能会有所改变,但是该版本包含了 PostgreSQL 16 最终正式版中所有新特性的预览,让我们赶紧一睹为快吧! PostgreSQL 16 改进了查询执行时的性能,支持更多的并行查询,包括外连接

    2024年02月06日
    浏览(39)
  • Postgresql源码(114)视图权限授予逻辑

    被授权的对象在系统表中记录授权信息,例如pg_namespace中的nspacl列: pusr1=UC/mingjie的含义: mingjie是赋予者 pusr1是被赋予者 UC是权限,表示USAGE和CREATE 有时会遇到下面场景,访问一个视图没有权限: 结果 查看namespace视图: 这种情况下,添加两种权限都可以访问函数: 这里我

    2024年02月07日
    浏览(39)
  • PostgreSQL安装和开启SSL加密连接【配置单/双向认证】

    SSL单向认证和双向认证: SSL单向认证 :只有一端校验对端的证书合法性,通常都是客户端来校验服务器的合法性。即在一般的单向认证中,只要求服务器端部署了ssl证书就行,客户端可以无证书,任何用户都可以去访问服务端,服务端只是提供了身份认证。 client: 无证书

    2024年02月06日
    浏览(43)
  • PostgreSQL实战-pg13主从复制切换测试

    修改/etc/profile文件, 添加如下内容: 清空数据表数据 主库清空数据表数据 从库对应的数据表也会被清空 新增数据表数据 主库数据表插入数据一行 从库数据表也会插入一行 删除数据表数据

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包