代码编织梦想

目录

PostgreSQL预写日志(WAL)

PostgreSQL逻辑解码(Logical Decoding)

逻辑解码方案研究分析


PostgreSQL预写日志(WAL)

从PostgreSQL 9.4.26版本开始,PostgreSQL 开始支持预写日志记录(Write-Ahead Logging)。WAL的核心概念:在写入对数据文件(表和索引所在的位置)的更改时,将描述更改的日志记录刷新到永久存储。和Oracle的REDO Log是类似的逻辑。

有两种记录日志的逻辑:

  • 同步提交:服务器等待事务的WAL记录刷新到永久存储,然后向客户端返回成功指示,可确保所有写入到数据库里的数据,都有其对应的日志记录。。
  • 异步提交:一旦事务在逻辑上完成,服务器就会在它生成的WAL记录实际进入磁盘之前立即返回成功。

同步提交可以保证客户端保留已提交的事务,即使在之后立即发生服务器崩溃也可以恢复。

异步提交的优点是事务可以更快地完成,但是有数据丢失的风险。如果数据库在异步提交和写入事务的WAL记录之间的风险时段内崩溃,则在该事务期间所做的更改将丢失。

注:恢复数据记录时,重播WAL是按照提交顺序重放的,因此不会引入不一致。

官方介绍:PostgreSQL:文档:9.4:可靠性和预写日志

PostgreSQL逻辑解码(Logical Decoding)

PostgreSQL在9.4版本中加入了逻辑解码。逻辑解码是将数据库表的所有持久更改提取为一致的、易于理解的格式的过程,该格式可以在不详细了解数据库内部状态的情况下进行解释。在PostgreSQL中,逻辑解码是通过将预写日志(WAL)的内容(描述存储级别的更改)解码为特定于应用程序的形式(如元组流或SQL语句)来实现的。

逻辑解码的过程:

当 Postgres 表中的某一行发生更改时,该更改将记录在 WAL 中。如果启用了逻辑解码,则该更改的记录将传递到输出插件。输出插件将该记录从WAL格式更改为插件的格式(例如JSON对象)。然后,重新格式化的更改通过复制槽退出 PostgreSQL。最后,还有消费者。消费者是您选择的连接到Postgres并接收逻辑解码输出的任何应用程序。

 注:从上面的过程可以看出,逻辑解码只能输出有关 Postgres 中的 DML(数据操作)事件的信息,不支持DDL变更,且任何不是 INSERT、UPDATE 或 DELETE 的命令都不支持(PostgreSQL: Documentation: 14: SQL Commands)。

官方介绍:PostgreSQL: Documentation: 14: 49.2.逻辑解码概念

逻辑解码方案研究分析

解码器pg版本输出格式
wal2json9.4+json
decoderbufs9.6+protobuf
pgoutput     10.0+pg log
test_decoding9.4+text
decoder_raw9.4+SQL

解析器:wal2json

开源地址:wal2json/README.md at master · eulerto/wal2json · GitHub

wal2json 是基于JSON的,目前由wal2json社区维护,Debezium解码消费此插件的输出内容。

其他信息:

Debezimu于2021-09-01停止支持wal2json,建议用户使用内置的pgoutput或decoderbufs。

信息来源:Discontinuing wal2json support (google.com)[DBZ-3953]弃用 wal2json 支持 -  (redhat.com)

解析器:decoderbufs

开源地址:GitHub - debezium/postgres-decoderbufs

decoderbufs 是基于Protobuf的,目前由Debezimu社区维护,Debezium解码消费此插件的输出内容。

此代码依赖于以下库,并需要它们进行编译:

解析器:pgoutput

pgoutput在PostgreSQL 10及以上版本中是标准的Logical Decoding 输出插件。由PostgreSQL社区官方维护,这个插件是内置安装的,所以不需要额外安装PostgreSQL。

Debezium解码消费此插件的输出内容。

解析器:test_decoding

这是PostgreSQL自带的"用于测试"的逻辑解码插件,一般不建议用于生产环境,可能存在未知的问题。

*网上相关的介绍比较少。

解析器:decoder_raw

开源地址:pg_plugins/decoder_raw at main · michaelpq/pg_plugins · GitHub

这个逻辑复制的输出插件会根据它发现的逻辑变化生成原始查询。这些查询可以被任何远程源使用。

*网上相关的介绍比较少。

参考文献:

1)官方文档:

2)社区文档:

写作不易,如果读完以后觉得有帮助,欢迎点赞和收藏!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42009408/article/details/126942259

postgresql wal日志_以前冷现在热的博客-爱代码爱编程

wal日志 wal日志是什么WAL机制实现LSN标记pg的wal配置检查点 wal日志是什么 WAL即Write-Ahead Logging,预写式日志(WAL)是保证数据完整

postgresql 10.1 手册_部分 iii. 服务器管理_第 19 章 服务器配置_19.5. 预写式日志_weixin_33781606的博客-爱代码爱编程

19.5. 预写式日志 19.5.1. 设置 19.5.2. 检查点 19.5.3. 归档 参阅第 30.4 节获取调节这些设置的额外信息。 19.5.1. 设置 wa

postgresql10,11,12版本wal_level参数配置-爱代码爱编程

今天我们来说说postgresql9.6以后的版本wal_level: wal_level (枚举类型) pg10版本中,待选的值为minimal、replica、logical。 minimal --不能通过基础备份和wal日志恢复数据库。 replica = 9.6版本以前的archive和hot_standby --该级别支持wal归档和复制。 lo

PG的复制-爱代码爱编程

PG的复制 pg的解码器decoderbufswal2jsonpgoutput复制物理复制逻辑复制(叫发布端与订阅端)逻辑复制架构图槽位replication slots业界关注的问题槽位相关命令槽位的创建槽位的查看槽位的删除slot在PGDATA中的信息槽位的激活逻辑复制搭建逻辑复制--发布端配置逻辑复制使用注意 pg的解码器 解码器是把W

mysql8和postgresql比较_MySQL8和PostgreSQL10功能对比-爱代码爱编程

现在MySQL 8和PostgreSQL 10已经发布,现在是重新审视两个主要的开源关系数据库如何相互竞争的好时机。 在这些版本之前,一般的看法是,虽然Postgres在功能集及血统方面更胜一筹,但MySQL在大规模并发读/写操作方面进行了更多的大规模测试。 但是随着最新版本的发布,两者之间的差距已大大缩小。 功能对比 下面看一下通常我们认为比

Postgresqlg关于wal日志总结,一文搞清楚它的所有概念和相关操作-爱代码爱编程

官方文档 https://www.postgresql.org/docs/11/wal-intro.html https://www.postgresql.org/docs/11/wal-configuration.html https://www.postgresql.org/docs/11/runtime-config-wal.html https:/

Postgresql12 + pgpool-ii 4.1.2 高可用集群[主备切换]配置和脚本编辑-爱代码爱编程

Postgresql12 + pgpool-ii 4.1.2 高可用集群[主备切换]配置和脚本编辑 高可用(容灾)效果: 先说说这套方案要达到的效果,解决的问题,目的不一致的,没有想了解的可以不用往下看了.解决三种宕机 某一个 postgresql 数据库挂掉 (多台数据库启动后 其中一台作为主机,其余作为备机 构成一个数据库集群); 如果是主

Debezium同步之PostgreSQL 的逻辑解码输出插件安装-爱代码爱编程

本文档描述了从PostgreSQL流式传输数据更改所需的数据库设置。这包括应用于数据库本身的配置以及wal2json逻辑解码输出插件的安装。安装和测试在以下环境/配置中执行: PostgreSQL (v9.6.10) wal2json CentOS 7 对于其他 Postgres 和

预写日志——wal_oldba.cn的博客-爱代码爱编程

预写日志——WAL 事务日志是数据库的重要组成部分,因为所有的数据库管理系统都要求即使发生系统故障也不丢失任何数据。它是数据库系统中所有更改和操作的历史日志,以确保没有数据因故障而丢失,例如电源故障或其他导致服务器崩溃的服务器故障。由于日志包含有关已执行的每个事务的足够信息,因此数据库服务器应该能够通过重播事务日志中的更改和操作来恢复数据库集群,以防服务器

debezium系列之:postgresql数据库的debezium连接器_目标博客专家的博客-爱代码爱编程

Debezium系列之:PostgreSQL数据库的Debezium连接器 一、概述二、连接器的工作原理1.安全2.快照3.Ad hoc snapshots4. 触发hoc snapshot5.增量快照6.增量快照过

postgresql12+pgpool-爱代码爱编程

Postgresql12+Pgpool-ii 4.1高可用集群 注意原文链接postgresql12主从复制链接一、方案1.1 方案效果1.1 主机配置 二、安装2.1 postgresql-12安装(3