postgres wal2json插件jsonb字段数据丢失问题解决
使用pg+wal2json+debezium进行数据同步时,发现偶尔会有jsonb字段数据丢失的问题
进行测试时发现:
1、发生数据丢失的jsonb字段长度都比较大(超过toast阈值,使用toast表存储)
2、针对发生jsonb字段丢失的数据,jsonb字段本身未发生修改时,能够百分百重现问题;而如果jsonb字段发生修改,就不会有问题
针对这个情况,分析是由于wal2json针对pg toast存储的处理导致
GitHub上找到相应的issue:https://github.com/eulerto/wal2json/issues/98
首先理解下什么是toast:
TOAST(The Oversized-Attribute Storage Technique)是一种机制,用于处理大数据对象(LOBs,Large Objects)或者超长字段的存储。当某个表中包含大量的大数据对象或超长字段时,这些数据可能会占据大量的存储空间,影响数据库性能。为了优化存储和处理性能,PostgreSQL 将大数据对象和超长字段称为 “TOAS Table” 数据,并将其存储在单独的 TOAST 表中。
而wal2json针对pg toast的存储做了"性能优化",如果发现toast字段未发生改变,就不输出这个字段。但是下游的debezium并不知道它做了这个优化,当然就无法进行处理了(debezium误识别为schema变更,把jsonb字段更新为null)
于是自己尝试修改wal2json代码,重新编译
修改方法很简单:搜索VARATT_IS_EXTERNAL_ONDISK关键字,把对应的代码逻辑注释掉



(其实这里看注释都能看出问题了)
修改之后重新编译(执行make命令即可),把新编译生成的wal2json.so文件,拷贝到pg的lib目录(我这里是/usr/pgsql-11/lib)
然后重新启动pg (systemctl start postgresql-11),问题解决
附带测试使用的命令:
创建slot:
pg_recvlogical -d postgres --slot test_slot --create-slot -P wal2json消费slot:
pg_recvlogical -d postgres --slot test_slot --start -o pretty-print=1 -o add-msg-prefixes=wal2json -f -删除slot:
pg_recvlogical -d postgres --slot test_slot --drop-slot
相关文章:
postgres wal2json插件jsonb字段数据丢失问题解决
使用pgwal2jsondebezium进行数据同步时,发现偶尔会有jsonb字段数据丢失的问题 进行测试时发现: 1、发生数据丢失的jsonb字段长度都比较大(超过toast阈值,使用toast表存储) 2、针对发生jsonb字段丢失的数据,jsonb字段本身未发生修…...
华为eNSP:路由引入
一、拓扑图 二、路由器的配置 1、配置路由器的IP AR1: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.2 24 [Huaw…...
Retrospectives on the Embodied AI Workshop(嵌入式人工智能研讨会回顾) 论文阅读
论文信息 题目:Retrospectives on the Embodied AI Workshop 作者:Matt Deitke, Dhruv Batra, Yonatan Bisk 来源:arXiv 论文地址:https://arxiv.org/pdf/2210.06849 Abstract 我们的分析重点关注 CVPR Embodied AI Workshop 上…...
「JVM」Full GC和Minor GC、Major GC
Full GC和Minor GC、Major GC 一、Full GC1、什么是Full GC?2、什么情况下会触发full gc? 二、Minor GC1、什么是Minor GC?2、什么情况下会触发Minor GC? 三、Major GC1、什么是Major GC?2、什么情况下会触发Major GC?…...
Asp.Net MVC 使用Log4Net
Asp.Net MVC 使用Log4Net 在 ASP.NET MVC 中使用 Log4net 需要进行一些配置和代码集成。下面是在 ASP.NET MVC 中使用 Log4net 的步骤: 1. 安装 Log4net NuGet 包 打开 NuGet 包管理器控制台,并运行以下命令来安装 Log4net: Install-Pack…...
[元带你学: eMMC协议 29] eMMC 断电通知(PON) | 手机平板电脑断电通知
依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《元带你学:eMMC协议》 内容摘要 全文 2000 字, 主要内容 前言 断电通知是什么? 断电通知过程...
vue使用recorder-core.js实现录音功能
下载组件 npm install recorder-core封装方法 record.ts //必须引入的核心 import Recorder from recorder-core;//引入mp3格式支持文件;如果需要多个格式支持,把这些格式的编码引擎js文件放到后面统统引入进来即可 import recorder-core/src/engine/…...
ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量
在PHPenv安装的时候,环境变量默认的PHP版本是7.4的,MySQL的版本是5.7的,要想使用ThinkPHP8来开发,就必须修改环境变量,本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv,网站&…...
UE使用UnLua(二)
1.前言 最近也是比较忙,忘了来更新了,好多都是开了头断更的(狗头),今天抽空再更一篇!! 这篇讲一下在UnLua中覆盖蓝图事件(函数),及按钮、文本控件的一些使用…...
Appium+python自动化(二十五)-获取控件ID(超详解)
简介 在前边的第二十二篇文章里,已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置,那么还有没有其他方法来获取控件点击事件所需要的点击位置呢?答案是:Yes!因为在不同的大小屏幕的手机上获取控件的坐…...
SDWAN组网的九大应用场景
SD-WAN(软件定义广域网)是一种新兴的网络技术,它可以优化和管理企业广域网(WAN)的数据传输,提供更加高效、灵活和安全的网络连接。SD-WAN的出现极大地改变了传统WAN的组网方式,为企业提供了更多…...
el-date-picker时间范围只能选五分钟之内
el-date-picker时间范围只能选五分钟之内 一、主要代码 一、主要代码 <el-date-pickertype"datetime"size"small"value-format"yyyy-MM-dd HH:mm:ss"v-model"searchData.submitTimeCode":editable"false"placeholder&qu…...
大数据分析案例-基于LightGBM算法构建乳腺癌分类预测模型
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
Java中的io流
File文件类 1.访问文件名相关的方法 String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)。 String getPath():返回此File对象所对应的路径名。File getAbsoluteFile():返回此 File对象的绝对路径。 String getA…...
23 自定义控件
案例:组合Spin Box和Horizontal Slider实现联动 新建Qt设计师界面: 选择Widget: 选择类名(生成.h、.cpp、.ui文件) 在smallWidget.ui中使用Spin Box和Horizontal Slider控件 可以自定义数字区间: 在主窗口w…...
从原理到实践,分析 Redisson 分布式锁的实现方案(二)
上篇讲解了如何用 Redis 实现分布式锁的方案,它提供了简单的原语来实现基于Redis的分布式锁。然而,Redis作为分布式锁的实现方式也存在一些缺点。本文将引入Redisson来实现分布式锁。 一、Redisson是什么 Redisson是一个基于Redis的分布式Java框架。它提…...
QT【day3】
思维导图: 闹钟: //widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QTimer> #include<QTime> //时间类 #include<QPushButton> //按钮类头文件 #include<QDebug&…...
模版模式和策略模式的区别
前言 模版模式和策略模式在日常开发中经常遇到,这两个设计模式有啥区别,这里简单总结下。 模版模式简单demo // 抽象模板类 abstract class AbstractClass {// 模板方法定义了算法的骨架public void templateMethod() {// 执行固定的步骤step1();step…...
Github搭建个人博客全攻略
Github搭建个人博客全攻略 一、Github二、配置博客仓库三、配置Git用户SSH密钥四、Deploy Key or Token方法一: Deploy Key方法二: Token 五、Hexo六、 主题七、 发布博文八、参考链接 一、Github Github是开发者的代码仓库,一个开源和分享社…...
gensim conherence model C_V 值与其他指标负相关BUG
在我用gensim3.8.3 conherence model分析京东评论主题模型时, C_V 与npmi、u_mass出现了强烈的皮尔逊负相关: 这些地方也反映了类似问题: https://github.com/dice-group/Palmetto/issues/12 https://github.com/dice-group/Palmetto/issue…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
