postgresql 同时更新两个表_了解PostgreSQL逻辑复制中的历史快照

微信又改版了,为了我们能一直相见

你的加星在看对我们非常重要

点击“长亭安全课堂”——主页右上角——设为星标?

期待与你的每次见面~

0 1 前言

基于 PostgreSQL 12.0 的代码实现。初步认识在逻辑复制中所使用的历史系统表快照(Historic Catalog Snapshot)。这部分的代码位于 src/backend/replication/logical/snapbuild.c。PostgreSQL 拥有十分良好的系统使用手册与源代码注释,为了尽可能避免让系列文章成为堆砌注释翻译及其源代码的“源码分析”类文章,一般文档对于关键性细节和重要实现逻辑都有所描述的,本文将不再进行赘述。因此推荐配合 PostgreSQL 源码及其注释一同进行阅读,相信读者能够从源码和系统使用手册中收获颇丰。

0 1 逻辑复制

使用数据库的流复制(Stream Replication)进行主从同步相信对于使用 PostgreSQL 的 DBA 或是系统开发者而言并不陌生。而从 9.4 版本开始,PostgreSQL 又正式支持了逻辑复制功能(Logical Replication),关于主从同步的更多不同的解决方案比较的扩展阅读可参阅这篇官方手册(www.postgresql.org/docs/12/different-replication-solutions.html)。我们目前在 HA 下的数据库主从同步便是使用了逻辑复制的方案,可以更为灵活的复制特定的表,自定义分发规则等。

更为复杂的情况下逻辑复制可以自行开发逻辑解码插件,文档中称为 Output Plugin。除了插件的初始化、自定义选项外,主要实现 src/include/replication/output_plugin.h 中定义的 OutputPluginCallbacks。参考这篇官方示例(www.postgresql.org/docs/12/logicaldecoding-example.html),我们可以使用 test_decoding 来进行一些实验,方便地观察逻辑复制的基本操作流程和效果等。一般我们使用 PostgreSQL 标准的解码插件 pgoutput 做同步。

0 2 从一个问题入手

起初在我们开始使用 PostgreSQL 提供的逻辑复制功能进行开发时,执行下列 SQL 分别创建复制槽及一个 Publication:

SELECT * FROM pg_create_logical_replication_slot('ha_sync_sub','pgoutput'); 

CREATE PUBLICATION ha_sync_pub FOR ALL TABLES;

从数据库进行订阅:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值