WalMiner:开启 PostgreSQL 异构 CDC 之旅

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

本文整理于 HOW 2026 演讲内容,演讲者:李传成,中国联通数据库内核开发工程师。

前言

在数据库技术日益多元化的今天,PostgreSQL 凭借其强大的功能特性和活跃的开源生态,已成为众多企业的核心数据存储方案。然而,随着业务的发展,单一的关系型数据库往往难以满足所有场景的需求——实时数据分析、数据仓库建设、异构系统数据集成等场景,都对数据的实时同步提出了更高的要求。

WalMiner 正是为解决这一问题而生的工具。它基于 PostgreSQL WAL(Write-Ahead Log)日志的解码能力,不仅提供了高效的数据恢复方案,更构建了一套完整的全局逻辑复制体系,能够将 PostgreSQL 的数据实时同步到包括 Doris 在内的多种目标数据库。本文将系统介绍 WalMiner 的核心技术、全局逻辑复制的优势,以及如何将其运用于 PG 到 Doris 的同步实践。

一、WalMiner 是什么

在这里插入图片描述

WalMiner 的核心模块基于对 WAL 日志的解析处理。与传统的逻辑解码方案需要将 WAL 级别设置为 logical 不同,WalMiner 支持在 replica 级别进行解码。通过解码 WAL 日志,可以细致地观察 PostgreSQL 数据库的历史数据变化过程,为问题诊断和数据恢复提供可靠依据。

基于这一核心解码能力,WalMiner 实现了多项高级功能,服务于不同的业务痛点:

1. replica 级别的逻辑解码

WalMiner 支持在 replica 级别(而非 logical 级别)进行全局逻辑复制,有效减少了数据库 WAL 日志的积压问题。这一特性使得逻辑复制不再依赖 logical 级别的设置,降低了生产环境的配置门槛和潜在风险。

2. 多重更新识别

在数据库发生误操作后,如果后续又有正常的业务操作对数据进行了修改,WalMiner 能够识别出这种复杂的变更序列,帮助恢复出用户期望的数据状态。这一功能在数据恢复场景中具有极高的实用价值。

3. 集簇级解码

传统的 PostgreSQL 逻辑复制需要针对每个数据库单独进行解码——如果有多个数据库需要同步,就需要多次读取和解析 WAL 日志。WalMiner 实现了极速集解码能力,只需读取一遍 WAL 即可完成多个数据库的解码工作,显著降低了对数据库资源的消耗。

4. 无侵入式部署

原生逻辑解码需要占用数据库的网络、磁盘和 CPU 资源。而 WalMiner 将解码工作完全移至独立机器执行,对生产数据库不产生任何额外负载。

5. 多版本兼容

WalMiner 的最新版本可以适配所有 PostgreSQL 版本,用户无需针对特定的 PG 版本选择不同的工具版本。

基于上述核心技术,WalMiner 构建了两大类应用场景:CDC(变更数据捕获)相关功能和数据库恢复功能。在 CDC 方面,WalMiner 提供了表级别并行导入导出工具,实测比 pg_dump 快 8 倍,比原生 COPY 命令快 2 到 3 倍。

二、WalMiner 全局逻辑复制 vs PG 原生逻辑复制

在这里插入图片描述

2.1 PG 原生逻辑复制的局限

PostgreSQL 原生的逻辑复制虽然在许多场景下表现良好,但也存在一些明显的不足:

  • ​资源压力​:原生逻辑复制依赖 logical 级别,如果订阅端处理不及时,会导致主库 WAL 日志大量积压,可能耗尽磁盘资源,影响业务正常运行。
  • ​多次读取开销​:在多库场景下,需要对每个数据库分别进行 WAL 的读取和遍历,造成数据库资源的重复消耗。
  • ​故障转移困难​:当主库发生故障时,需要手动修改下游备库的连接配置才能继续复制,无法实现自动故障转移。
  • ​不支持 DDL 同步​:新建数据库或修改表结构等 DDL 操作,下游无法自动感知和同步。

2.2 WalMiner 全局逻辑复制的优势

WalMiner 采用独立部署架构,通过流复制协议从主库拉取 WAL 日志到本地进行解码。解码完成后,结果可以在本地暂存,并通过多种方式进行消费:

  • ​直接同步​:启动线程将数据直接应用到目标数据库。
  • ​服务化订阅​:通过 Java 或 Python 程序通过网络连接服务端,拉取解码结果进行消费。
  • ​灵活输出​:支持标准输出(便于测试验证)、文件存储、时间分片保存等多种输出方式。其中时间分片保存功能特别适用于网络不稳定或生产库无法直接连接目标库的隔离场景——解码结果可先暂存于本地,待网络恢复或通过移动存储介质再行传输。

在故障转移方面,WalMiner 支持配置多个备库地址。当主库发生切换时,程序能够自动感知并连接新的主库,继续执行逻辑复制任务,实现了高可用架构下的无缝衔接。

在 DDL 支持方面,WalMiner 的全局逻辑复制能够捕获并同步 CREATE DATABASE、CREATE TABLE 等 DDL 变更,确保源端和目标端的结构一致性。

三、PG 到 Doris 的同步实践

将 PostgreSQL 数据同步到 Doris 等 AP 型数据库,是许多企业构建实时数仓的常见需求。WalMiner 提供了一套完整的解决方案。

3.1 流程概览

PG 到 Doris 的同步与 PG 到 PG 的同步遵循同一套逻辑框架,主要步骤包括:初始化配置、创建订阅、启动同步。区别在于目标数据库的连接串需要调整为 Doris 的连接参数。

3.2 初始化

通过 walminer pgto init 命令进行初始化,需要指定配置目录、源库连接串、目标库连接串,以及并行度等参数:

walminer pgto init -c /path/to/config \
    --source-connstr1='dbname=postgres host=localhost port=10070 ...' \
    --target-connstr='dbname=db1 host=localhost port=9030 username=root ...' \
    -t 2 -K 2

其中 -K 参数用于指定目标数据库的类型。Doris 有自己特定的取值,用户可通过 --help 查看最新支持的参数值。

3.3 创建订阅

通过 walminer pgto bind 命令创建订阅,指定需要同步的库和表:

walminer pgto bind -c /path/to/config -I '[sub1][db1.public.test_pgto_2][db1.db1.test_pgto2]'

需要注意的是,Doris 的库结构为两层(库和表),而 PostgreSQL 为三层(库、schema、表)。为保持兼容性,在配置映射时需要在 Doris 侧补充类似库名的映射处理。

3.4 启动同步与验证

执行 walminer pgto run 命令启动同步进程。同步启动后,在 PostgreSQL 源端插入的数据可以在 Doris 中即时查询到。跨库的数据同步同样可以正常完成。

四、AI 赋能:用大模型操作 WalMiner

WalMiner 作为命令行工具,拥有丰富的参数和帮助文档,天然适合被大语言模型(LLM)调用。通过将 WalMiner 的技能文档加载到 AI 系统中,用户可以用自然语言完成原本需要记忆复杂命令才能执行的操作。

4.1 误操作数据找回

用户只需告诉 AI“我需要恢复某个表的数据”,AI 即可自动生成并执行相应的 WalMiner 命令,完成数据恢复,无需用户记忆任何具体命令。

4.2 WAL 日志分析

AI 可以自主分析 WAL 日志,输出事务数量、操作时间点、LSN 位置、操作类型以及日志资源消耗等详细信息。如果用户有更具体的分析需求,只需在技能文档中补充描述,AI 便能据此执行定制化的分析任务。

4.3 自动化搭建逻辑复制

AI 可以端到端地完成全局逻辑复制的搭建:

  1. 根据环境变量解析源库和目标库的连接参数,生成并执行初始化命令。
  2. 自动绑定所有库和所有表,询问用户是否需要进行基础数据的全量同步。
  3. 调用 pg_dump 等工具完成元数据同步和基础数据同步。
  4. 启动逻辑复制进程,并持续监控同步速度、Gap 值和解码位点等信息。
  5. 自动生成测试数据,验证 DML 同步和跨库同步是否成功,并汇报测试结果。

通过 AI 的集成,WalMiner 的使用门槛被大幅降低——从配置、同步到监控、测试,整个流程都可以通过自然语言交互完成。

总结

WalMiner 通过创新的 WAL 日志解码技术,为 PostgreSQL 用户提供了一套高效、灵活、低侵入的全局逻辑复制方案。无论是在 PG 实例之间构建高可用复制架构,还是将数据实时同步到 Doris 等 AP 数据库以支撑实时分析场景,WalMiner 都展现出了优于原生逻辑复制的诸多特性。而与大模型的结合,更进一步降低了工具的使用门槛,让复杂的 CDC 任务可以通过自然语言即可完成。

在数据实时流动需求日益增长的今天,WalMiner 为 PostgreSQL 的数据同步与集成提供了一条值得探索的快捷路径。

stm32学习笔记:ADC 阅读详情

相关推荐

Ubuntu系统下USB无线网卡无法识别的解决方案

Realtek的USB设备可能是无线网卡、有线网卡、读卡器等,系统仅知道“这是Realtek的USB设备”,但不知道“如何将其作为无线网卡驱动”。通过以上步骤,RTL8812AU 芯片的 Edimax 无线网卡应能被 Ubuntu 识别并正常工作。Realtek等品牌的无线网卡可能被系统简单识别为"USB设备",但未匹配到对应的无线驱动,导致设备无法发挥网络功能。是系统识别了USB设备,却未正确加载无线网卡驱动。(前4位是厂商ID,后4位是产品ID),显示设备已识别,但网络管理工具无反应,

极地星辰 3467

linux学习

sudo make install:组装好的家具(编译好的库文件),原本放在你的临时工作区。坏处是,你的程序体积会变大。于是,他会根据你的计划书,结合你电脑的当前情况(比如装了什么编译器,库在哪),生成一本极度详细的《施工进度表》。很多大牌的第三方库(比如你刚装的 libevent)为了照顾不同的需求,会同时提供动态库(.so)和静态库(.a),但并不是所有库都这样。只有动态库:常见于系统的核心库(比如你系统的底层 C 库),或者一些商业闭源软件(厂商只给你一个黑盒子,不让你直接把代码打包进你的程序)。

d_mail的博客 194

QT的温湿度显示系统

大家好,这里是石侃侃的博客,欢迎前来讨论这篇文章介绍的是DHT11在2440上的基于Qt5.6的应用基于单片机系统的温湿度监测系统构成框图如图2-1所示。图2-1 系统构成框图该系统采用单片机s3c2440作为了本设计的核心元件。利用LCD作为了显示器件,利用触摸屏作为用户界面输入设备,第一行显示当前实时的温度,湿度,第二行依次显示历史时刻最高的温度值,最高的湿度值。第三行是一个文本框,记录了程...

zxpcus的博客 1万+

ubuntu 偶发启动失败问题分析

ubuntu 系统启动偶发异常问题分析

平面到立体 198

别再为授权费头疼了!手把手教你免授权搞定西门子、马扎克等12种主流数控机床的数据采集

本文提供了一套免授权采集西门子、马扎克等12种主流数控机床数据的实战指南,帮助中小型机加工车间节省80%以上的采集成本。通过TCP/UDP协议逆向工程和跨平台数据整合,实现经济、灵活且可持续的数据采集方案,涵盖设备兼容性处理、数据频率优化等关键问题。

weixin_26873711的博客 709

WPF+MVVM案例实战(二十三)- 阴影效果详解

通过附加属性实现阴影效果,通过改变不同的阴影属性值达到不同阴影效果

lingshuangcanxue 561

177.Agent-LangGraph-MCP的构成说明

MCP架构通过MCP主机、客户端与服务器的协同,实现工具、资源与提示词的统一管理。MCP服务器提供Tools、Resources、Prompts能力,MCP客户端则负责发现、调用与读取,使Agent可按需获取上下文。其核心在于将工具从Agent中抽离,封装为可复用的服务,提升灵活性与可维护性,推动AI应用高效协作。

计算机王的博客 291

家用扫地机器人实物拆解报告-从顶盖到每一颗螺丝 · 逐层拆解旗舰扫拖一体机器人

2026年旗舰扫拖机器人拆解报告:采用D形机身设计,主机重4.5kg,基站重12kg。核心配置包括RK3588S+STM32H743双处理器、8颗21700电池、LDS激光雷达和双摄像头+结构光导航系统。创新设计亮点:锥形滚刷自动排毛发、活水循环拖地系统、基站集成450W强力集尘和自动上下水模块(带三重防漏保护)。整机采用模块化设计,关键部件均支持快速更换,在密封性、防呆设计和降本增效方面展现出成熟的工程智慧。

智能硬件研发,欢迎交流 522

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 477

AI Agent开发大全第一课-AI是什么以及如何使用AI

近年来,人工智能的迅猛发展引发了广泛的关注,尤其是“大模型”这一概念越来越深入人心。大模型,顾名思义,通常指的是那些拥有大量参数、能够处理复杂任务的机器学习模型。与传统小模型相比,大模型在数据处理、信息理解和生成等方面表现更加出色。为了理解为什么现在的AI被称为大模型,我们需要深入探讨几个关键因素。立角色是指在提示词中清晰地界定交互双方的身份。明确用户希望模型扮演的角色,可以帮助模型更准确地理解上下文和用户需求。

打造全国最全的AI Agent开发知识领域的博客 1407

我的世界模组开发——前言

避坑:在开发过程中一定不要过分依赖AI,虽说现在的人工智能很厉害,但是也有很大的弊端,很多AI生成的代码错误百出,还得自己修改,而且像deepseek这种AI的训练数据还停留在一年前,给出的maven仓库地址都是过时的甚至是错误的,开发模组就是要多学习,多看源码,这样开发模组的水平才能越来越高。总而言之,build.gradle文件在我的世界Forge模组开发中扮演了重要的角色,它定义了项目的构建过程、依赖关系和编译选项,为开发者提供了灵活而强大的构建工具。开发工具推荐使用idea,因为可以使用通灵义码。

qq_24992377的博客 2594

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 436

Jetson AGX Orin和Drive AGX Orin相机的关联分析和编程指南

通过适当的相机接口和连接,以及使用适当的软件开发环境,开发人员可以在这些平台上实现相机功能。Jetson AGX Orin和Drive AGX Orin是NVIDIA推出的两款强大的计算平台,用于自动驾驶和人工智能应用。Jetson AGX Orin和Drive AGX Orin平台提供了强大的计算能力,使开发人员能够实现复杂的相机功能和算法。以上只是一些示例,Jetson AGX Orin和Drive AGX Orin平台提供了丰富的开发资源和工具,可用于实现各种复杂的相机应用。显示图像在一个窗口中。

CyberLynxO的博客 1122

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 251

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 310

SAP B1中文培訓教材_SDK

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

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 179

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 159

Docker部署linkding:HTTPS与数据备份

部署私人书签库,除了让页面能够打开,还需要考虑几个实际问题:重建容器后数据是否保留、登录和保存是否正常、升级前怎样备份,以及出现 502 或 CSRF 错误时从哪里检查。本文使用 Docker Compose 部署 linkding,采用默认 SQLite 数据库,通过 Caddy 提供 HTTPS,并完成账户创建、数据持久化验证和备份。如果重建后账户或书签消失,应先检查是否换了项目目录、改了挂载路径,或者启动了另一套实例,不要急着重新初始化。遇到权限问题,应根据日志确认具体目录和运行用户,再调整权限。

tedcloud123的博客 173

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 209

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 295

软件项目交付时,源代码之外还应该交付哪些技术资料?

软件项目交付时,除可运行程序外,还应核对源代码、数据库结构、接口文档、部署运维、测试验收和账号资产。本文从实际交付环节拆解完整资料清单,并说明合同如何约定交付范围、知识产权与维护边界。

chengduyoushu的博客 306

Axum 初步入门学习笔记

)自定义错误实现后,可以直接作为Result的ErrAxum 是一个构建在 Tokio、Tower、Hyper 之上的 Rust Web 框架,核心能力是:Router 路由、Extractor 提取器、Tower 中间件、IntoResponse 响应机制、State 共享状态。那张分层架构图是“地图”不是“说明书”:它帮你建立全局观,但 Service、Repository、数据库、Redis、MQ 都是你自己在 Handler 内部调用的业务/基础设施层,不是 Axum 自带的。

weixin_43219667的博客 193

MySQL报Too many open files?句柄耗尽的排查与参数配置

文章讲清 max_connections 与 open_files_limit 两个额度、句柄被谁占走、分区表为什么最容易踩,给出从 error log 到 /proc/pid/limits 的定位顺序与句柄预算算法。

「一个在数据库赛道上边学边分享的学妹」——聚焦国产数据库/信创方向、分享学习笔记、踩坑经验和行业观察。 336

SQL Server 数据库双备份:简化配置,兼顾本地留存与异机归档

本文针对中小企业SQLServer数据库备份难题,提出简化配置与本地+异机双副本方案。传统原生备份依赖手动脚本,存在配置复杂、传输易中断、日志分散、静默失败等问题。推荐使用图形化工具实现备份、本地留存与异机同步一体化管理,支持断点续传、加密传输、自动清理与版本控制,降低运维负担。双副本策略提升数据安全性,本地快速恢复,异地防硬件故障。建议定期验证恢复流程,确保备份可用性。

2501_93776716的博客 309

Agent 安全实战:间接提示注入的四个攻击面与防御体系

当 Agent 从 "生成内容" 走向 "执行动作",安全边界就从内容合规变成了权限越界。本文拆解间接提示注入在网页抓取、工具返回值、MCP 连接器、长期记忆四个位置的真实攻击路径,对照 Claude、GPT、Gemini 在工具调用权限模型上的设计差异,给出可直接落地的五层防御体系。

阡陌数智,专注大模型网关与 LLM 工程落地 281

Redis 入门详解:核心特性、重要文件与全局命令实战

本文系统介绍了Redis的核心特性、重要文件及全局命令。Redis凭借内存存储、C语言实现和单线程设计,具备极高的读写性能;支持持久化(RDB/AOF)、主从复制与集群架构,适用于缓存、排行榜、计数器等场景,但不适合存储海量冷数据。文中还解析了常见面试题,如为何快速、单线程原理、持久化机制、KEYS *禁用原因及过期键处理策略,强调其在高并发场景下的优势与局限。

2303_77004089的博客 206
上一篇: PostgreSQL 日报 |PostgreSQL 19 Beta 4 发布(9 月 25 日)
下一篇: PostgreSQL 日报 | 可见性映射数据损坏修复(9 月 26 日)
IvorySQL
博客等级 码龄5年 745粉丝 566原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值