前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >POSTGRESQL CDC 现学现卖

POSTGRESQL CDC 现学现卖

作者头像
AustinDatabases
发布2019-06-21 16:44:05
1.8K0
发布2019-06-21 16:44:05
举报
文章被收录于专栏:AustinDatabases

本来想睡觉,最近很累,但看完某篇文章后,实在是经不起诱惑,起来继续,Change Data Capture, 其实这东西很多数据库都有这个功能,SQL SERVER 本身就有 CDC 的功能。PostgreSQL 的 CDC ,不能光看,还的去实践。

首先 POSTGRESQL 本身的复制方式有流式复制和逻辑复制两种,今天要说的就是逻辑复制中的CDC功能。而实施CDC POSTGRESQL 要具备两个功能,1 获取数库的变更日志(WAL) 和 获取变更日志前的数据一致性快照,最后要保存消费者的偏移量。而提到逻辑复制,是从PG10开始的新功能。

1 先通过一个实践来看看什么叫PG的 CDC (以忽略部分数据库基础设置)

首先我们先要创建一个逻辑复制槽,并且使用系统给定的一个test_decoding的解码插件。

创建完复制槽后,我们开始一些相关的数据库操作,从下图可以看出想的DDL 操作并没有解析,仅仅是记录了begin commit

我们来在做做 DML操作,明显相关的记录可以被解码并且可以看出数据库刚才在操作了什么。

当然具体的使用我们还需要使用 pg_recvlogical 来进行数据的捕捉和更多的应用,如果直接将这些输出output 到动态的文件中,那一个数据库的CDC的记录就有了。以后在发现数据库哪个表里面的记录不对,就可用这样的方法早做日志进行记录。

同时我们也可以更换逻辑复制槽中的解码工具,我们看一下,在PG中输入的数据,经过逻辑复制槽后,直接解码为为 JSON 的数据

当然如果我们使用了其他的解析插件的情况下,还可以将语句直接翻译过来,如果保留这些语句,可以自己做一个类似于UNDO 的东西,将已经执行的语句,进行回滚,从中也更加理解了 data pipleline 中为什么对传统数据库要设置主键,这样可能方便捕获的数据进行一个更新或者判断插入或更新等等的操作。

通过上图,其实我们就可以建立一个自己简易的CDC 系统,通过记录如果表的设计上在完整一些,CDC 的一个日志系统将会为POSTGRESQL 数据库的数据任意时间点的数据 UNDO ,作为一个强有力的支持。

从中就更能理解开源的数据库在使用中的灵活度和相关的乐趣。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档