当前位置: 首页 > article >正文

PostgreSQL逻辑复制槽功能

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2720人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 +9)(1 2 3 4 5 6群均已爆满,群430+,开8群200+ 9群)

PostgreSQL 数据库的逻辑复制槽是一项非常重要的功能,通过逻辑复制槽本身,可以提供多种多样的功能。这里我们画一个思维导图进行一个全方面的分析和梳理。

PostgreSQL 逻辑复制槽

逻辑复制槽的功能可以用到多种途径,满足多种业务的需求。 这里总结:

  1. 数据库升级 PostgreSQL数据库升级中,有如下的需求,则需要考虑使用逻辑复制槽的方式来进行数据库的升级。


  1. 系统不能停机太长时间,或根本无法停机,通过逻辑复制槽的方式来进行数据的同步到目的主机(已经升级的PostgreSQL系统)

  2. 系统升级有负担,需要进行验证,或灰度的升级,程序是两份需要连接到不同的数据库版本中,需要动态数据的支持。(需要注意,验证正能验证 Query SQL)


  1. 数据库备份


  1. 数据备份中,仅仅针对表级别进行实时的数据备份

  2. 数据备份中,需要动态的只读类的逻辑库备份

  3. 数据备份中,需要对表进行改造后,进行数据备份,或备份不在主机中尽显,而是在备库中进行。


  1. 数据异步同步


  1. 针对Saas类的需求,进行异步的部分数据同步到甲方

  2. 数据逻辑库异步同步到备库,已被进行非实时的查询

  3. 远程可接受的数据远程传输和移动,且保证数据的异步实时同步


  1. 异构数据库输出


  1. 通过不同的插件输出数据库中的CDC,来捕捉数据库中数据的变化,来进行预估触发事件

  2. 通过不同的插件来完成数据库审计操作的部分功能

  3. 通过不同的插件来进行异构数据的捕捉和清洗等,在将数据通过kafka等二次传输给异构的数据库产品,进行异构的数据同步功能。


  1. 不同的支持逻辑复制的插件

插件名称

输出格式

适用场景

默认安装

test_decoding

文本

测试和开发环境

✅ 是

pgoutput

内部格式

逻辑复制、主备同步

✅ 是

wal2json

JSON

Kafka、Debezium、数据湖

❌否

pg_recvlogical

文本

轻量级日志分析

✅ 是

decoderbufs

Protobuf

高性能数据流

❌ 否


下面是简单的实际操作案例 (版本PG16) 注意事项: 1.在数据复制中,需要保持复制中的所有表均有主键,或唯一索引,如表中无这两项,也可以进行逻辑复制但会严重影响性能,或导致逻辑复制报错

2.数据复制中需要源库需要保证有足够的空间存留WAL日志,避免数据延迟中WAL日志空间不足导致的数据库停机的风险

3.数据复制中需要严格监控复制槽的状态,避免订阅端出现问题,导致复制中断后,主库WAL不断挤压导致的磁盘空间异常问题。

4.逻辑复制槽最大的单位是针对逻辑库,而不是实例这点需要注意

psql

1 进行单逻辑库的数据库传输

在源库上创建逻辑复制槽,注意逻辑复制槽最好带有对应数据库的名字。

SELECT pg_create_logical_replication_slot('test_database', 'pgoutput');

//创建一个发布名字为 test_all_tables

CREATE PUBLICATION test_all_tables FOR ALL TABLES;
postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create table test(id int primary key,name varchar(20),age int);
CREATE TABLE

test=# insert into test(id,name,age) values (1,'Simon',33),(2,'Kim',23);
INSERT 0 2
test=# SELECT pg_create_logical_replication_slot('test_database', 'pgoutput');
 pg_create_logical_replication_slot 
------------------------------------
 (test_database,0/60DA2E0)
(1 row)

test=# CREATE PUBLICATION test_all_tables FOR ALL TABLES;
CREATE PUBLICATION

2 在目的库建立同名的test库,同时建立同名的表,同结构的表,然后创建订阅,最后查询当前的订阅情况

test=# CREATE SUBSCRIPTION test CONNECTION 'host=192.168.198.100 port=5432 dbname=test user=admin password=admin' PUBLICATION test_all_tables;
NOTICE:  created replication slot "test" on publisher
CREATE SUBSCRIPTION
test=# 
test=# select * from pg_subscription;
  oid  | subdbid | subskiplsn | subname | subowner | subenabled | subbinary | substream | subtwophasestate | subdisableonerr | subpasswordrequire
d | subrunasowner |                             subconninfo                              | subslotname | subsynccommit |  subpublications  | subo
rigin 
-------+---------+------------+---------+----------+------------+-----------+-----------+------------------+-----------------+-------------------
--+---------------+----------------------------------------------------------------------+-------------+---------------+-------------------+-----
------
 16421 |   16414 | 0/0        | test    |    16387 | t          | f         | f         | d                | f               | t                 
  | f             | host=192.168.198.100 port=5432 dbname=test user=admin password=admin | test        | off           | {test_all_tables} | any
(1 row)

test=# select * from test;
 id | name  | age 
----+-------+-----
  1 | Simon |  33
  2 | Kim   |  23
(2 rows)

下面我们换另一个实例,我们创建一个不完全同步的表,只同步部分的字段,这里我们在源库创建新的逻辑复制槽,test_id_name

test=# create publication test_id_name for table test (id,name);
CREATE PUBLICATION
test=# select * from pg_publication;
  oid  |     pubname     | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot 
-------+-----------------+----------+--------------+-----------+-----------+-----------+-------------+------------
 16860 | test_all_tables |       10 | t            | t         | t         | t         | t           | f
 16862 | test_id_name    |       10 | f            | t         | t         | t         | t           | f
(2 rows)

test=#

然后我们在目的库的另一逻辑库引用这个新的publication

test=# create database test2;
CREATE DATABASE
test=# \c test2
You are now connected to database "test2" as user "admin".
test2=# 
test2=# create table test(id int primary key,name varchar(20));
CREATE TABLE

test2=# CREATE SUBSCRIPTION test_id_name_s CONNECTION 'host=192.168.198.100 port=5432 dbname=test user=admin password=admin' PUBLICATION test_id_name;
NOTICE:  created replication slot "test_id_name_s" on publisher
CREATE SUBSCRIPTION
test2=# 
test2=# 
test2=# select * from test;
 id | name  
----+-------
  1 | Simon
  2 | Kim
(2 rows)

test2=#

通过以上的两个小的实验我们获得了2个逻辑复制槽进行PostgreSQL 逻辑库和单表(选择非全部列)的工作方式。

这里还需要注意,如果源库新加表等,都需要运行如下的命令来刷新订阅接受命令。 ALTER SUBSCRIPTION 订阅的名字 REFRESH PUBLICATION;


对于逻辑复制槽的监控需要注意

1 需要定期发现逻辑复制槽的状态 2 发现逻辑复制槽挤压WAL的文件的情况

::如果发现逻辑复制槽失效,或由于WAL源库的文件丢失等原因逻辑复制槽无法再消费,则必须马上删除订阅,删除逻辑复制槽。

通过如下的命令来针对逻辑复制槽进行监控

test2=# SELECT subname, pid, relid, received_lsn, last_msg_send_time, 
test2-#        last_msg_receipt_time, latest_end_lsn, latest_end_time
test2-# FROM pg_stat_subscription;
    subname     | pid  | relid | received_lsn |      last_msg_send_time       |     last_msg_receipt_time     | latest_end_lsn |        latest_en
d_time        
----------------+------+-------+--------------+-------------------------------+-------------------------------+----------------+-----------------
--------------
 test           | 5478 |       | 0/60DF6F8    | 2024-11-29 12:16:11.152715-05 | 2024-11-29 12:16:11.152782-05 | 0/60DF6F8      | 2024-11-29 12:16
:11.152715-05
 test_id_name_s | 5635 |       | 0/60DF6F8    | 2024-11-29 12:16:10.476948-05 | 2024-11-29 12:16:10.47766-05  | 0/60DF6F8      | 2024-11-29 12:16
:10.476948-05
(2 rows)

下面的命令并不准确,尤其在主库并未有真实的数据变动或插入则这个语句就会产生问题,但如果能保证主库持续有数据,则这个语句可以观察逻辑复制的从库与主库的数据之间的延迟

test2=# SELECT subname, 
test2-#        EXTRACT(EPOCH FROM (now() - last_msg_receipt_time)) AS delay_seconds
test2-# FROM pg_stat_subscription;
    subname     | delay_seconds 
----------------+---------------
 test           |      4.555973
 test_id_name_s |      5.372016
(2 rows)

检查逻辑复制槽的状态,明显active=F 的逻辑复制出现问题,可能是网络,也可能是WAL丢失,或者是订阅端出现问题等等,都需要后续的分析和排除故障。

test=# SELECT slot_name, plugin, active, restart_lsn, confirmed_flush_lsn 
test-# FROM pg_replication_slots
test-# WHERE slot_type = 'logical';
   slot_name    |  plugin  | active | restart_lsn | confirmed_flush_lsn 
----------------+----------+--------+-------------+---------------------
 test_database  | pgoutput | f      | 0/60DA2A8   | 0/60DA2E0
 test           | pgoutput | t      | 0/60DF6C0   | 0/60DF6F8
 test_id_name_s | pgoutput | t      | 0/60DF6C0   | 0/60DF6F8
(3 rows)

置顶

追逐太阳的男人--林春 《金融数据库转型实战》

临时工:数据库人生路,如何救赎自己  -- 答某个迷茫DBA的职业咨询

开源软件是心怀鬼胎的大骗局 -- 开源软件是人类最好的正能量 --- 一个人的辩论会

AI 祸国殃民必须铲除,AI国强民富必须支持

AI 能替代DBA吗,我好焦虑,你焦虑个屁!!!

宇宙的“PostgreSQL” 说 “地球上的PG” 都是“小垃圾”

天上的“PostgreSQL”  说 地上的 PostgreSQL 都是“小垃圾”

云数据库核爆在内部,上云下云话题都是皮外伤!--2025云数据库专栏(二)

PolarDB 相关文章

“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!

PostgreSQL 的搅局者问世了,杀过来了!

在被厂商围剿的DBA 求生之路 --我是老油条

POLARDB  添加字段 “卡” 住---这锅Polar不背

PolarDB 版本差异分析--外人不知道的秘密(谁是绵羊,谁是怪兽)

在被厂商围剿的DBA 求生之路 --我是老油条

PolarDB 答题拿-- 飞刀总的书、同款卫衣、T恤,来自杭州的Package(活动结束了)

PolarDB for MySQL 三大核心之一POLARFS 今天扒开它--- 嘛是火星人

PolarDB-MySQL 并行技巧与内幕--(怎么薅羊毛)

PolarDB 并行黑科技--从百套MySQL撤下说起 (感谢8018个粉丝的支持)

PolarDB 杀疯了,Everywhere Everytime Everydatabase on Serverless

POLARDB  从一个使用者的角度来说说,POALRDB 怎么打败 MYSQL RDS

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PolarDB 从节点Down机后,引起的主从节点强一致的争论

PolarDB serverless 真敢搞,你出圈了你知道吗!!!!

PolarDB VS PostgreSQL  "云上"性能与成本评测 -- PolarDB 比PostgreSQL 好?

临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  Serverless POC测试中有没有坑与发现的疑问

临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处

POLARDB  到底打倒了谁  PPT 分享 (文字版)

POLARDB  -- Ausitndatabases 历年的文章集合

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?

PostgreSQL 相关文章

“PostgreSQL” 高性能主从强一致读写分离,我行,你没戏!

PostgreSQL  添加索引导致崩溃,参数调整需谨慎--文档未必完全覆盖场景

PostgreSQL 的搅局者问世了,杀过来了!

PostgreSQL SQL优化用兵法,优化后提高 140倍速度

PostgreSQL 运维的难与“难”  --上海PG大会主题记录

PostgreSQL 什么都能存,什么都能塞 --- 你能成熟一点吗?

PostgreSQL 迁移用户很简单 ---  我看你的好戏

PostgreSQL 用户胡作非为只能受着 --- 警告他

全世界都在“搞” PostgreSQL ,从Oracle 得到一个“馊主意”开始
PostgreSQL 加索引系统OOM 怨我了--- 不怨你怨谁

PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!

病毒攻击PostgreSQL暴力破解系统,防范加固系统方案(内附分析日志脚本)

PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

PostgreSQL 如何通过工具来分析PG 内存泄露

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?

POSTGRESQL --Austindatabaes 历年文章整理

PostgreSQL  查询语句开发写不好是必然,不是PG的锅

PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"

PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了

PostgreSQL DBA硬扛 垃圾 “开发”,“架构师”,滥用PG 你们滚出 !(附送定期清理连接脚本)

DBA 失职导致 PostgreSQL 日志疯涨

MySQL相关文章

MySQL  内存那点事你还不会--PS分析+自动历史SQL分析(2)

MySQL SQL优化快速定位案例 与 优化思维导图

"DBA 是个der" 吵出MySQL主键问题多种解决方案

MySQL 怎么让自己更高级---从内存表说到了开发方式

MySQL timeout 参数可以让事务不完全回滚

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验

用MySql不是MySQL, 不用MySQL都是MySQL 横批 哼哼哈哈啊啊

MYSQL  --Austindatabases 历年文章合集

OceanBase 相关文章

OceanBase 6大学习法--OBCA视频学习总结第四章 --数据库安装

OceanBase 6大学习法--OBCA视频学习总结第三章--数据库引擎

OceanBase 架构学习--OB上手视频学习总结第二章 (OBCA)

OceanBase 6大学习法--OB上手视频学习总结第一章

没有谁是垮掉的一代--记 第四届 OceanBase 数据库大赛

OceanBase  送祝福活动,礼物和幸运带给您

跟我学OceanBase4.0 --阅读白皮书 (OB分布式优化哪里了提高了速度)

跟我学OceanBase4.0 --阅读白皮书 (4.0优化的核心点是什么)

跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)

跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)

聚焦SaaS类企业数据库选型(技术、成本、合规、地缘政治)

OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB

OceanBase  学习记录 -- 安装简易环境

OceanBase  学习记录 --  开始入门

数据库最近第一比较多,OceanBase 定语加多了?

临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者

临时工说:OceanBase 到访,果然数据库的世界很卷,没边

数据库信息速递  阿里巴巴的分布式数据库OceanBase旨在进军中国以外的市场 (翻译)

MongoDB 相关文章

MongoDB  大俗大雅,上来问分片真三俗 -- 4 分什么分

MongoDB 大俗大雅,高端知识讲“庸俗” --3 奇葩数据更新方法

MongoDB 学习建模与设计思路--统计数据更新案例

MongoDB  大俗大雅,高端的知识讲“通俗” -- 2 嵌套和引用

MongoDB  大俗大雅,高端的知识讲“低俗” -- 1 什么叫多模

MongoDB 合作考试报销活动 贴附属,MongoDB基础知识速通

MongoDB 年底活动,免费考试名额 7个公众号获得

MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)

数据库 《三体》“二向箔”  思维限制 !8个公众号联合抽奖送书 建立数据库设计新思维

MongoDB  是外星人,水瓶座,怎么和不按套路出牌的他沟通?

17000多张MongoDB表的锅 自动分析删除表数据难题--从头到尾的处理过程(文尾有MongoDB开发规范)

MongoDB 插入更新数据慢,开发问哪的问题?附带解决方案和脚本

MongoDB 不是软柿子,想替换就替换

MongoDB  挑战传统数据库聚合查询,干不死他们的MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)

MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模

MongoDB  双机热备那篇文章是  “毒”

MongoDB   会丢数据吗?在次补刀MongoDB  双机热备

MONGODB  ---- Austindatabases  历年文章合集

PolarDB 相关文章

PostgreSQL 的搅局者问世了,杀过来了!

在被厂商围剿的DBA 求生之路 --我是老油条

POLARDB  添加字段 “卡” 住---这锅Polar不背

PolarDB 版本差异分析--外人不知道的秘密(谁是绵羊,谁是怪兽)

在被厂商围剿的DBA 求生之路 --我是老油条

PolarDB 答题拿-- 飞刀总的书、同款卫衣、T恤,来自杭州的Package(活动结束了)

PolarDB for MySQL 三大核心之一POLARFS 今天扒开它--- 嘛是火星人

PolarDB-MySQL 并行技巧与内幕--(怎么薅羊毛)

PolarDB 并行黑科技--从百套MySQL撤下说起 (感谢8018个粉丝的支持)

PolarDB 杀疯了,Everywhere Everytime Everydatabase on Serverless

POLARDB  从一个使用者的角度来说说,POALRDB 怎么打败 MYSQL RDS

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PolarDB 从节点Down机后,引起的主从节点强一致的争论

PolarDB serverless 真敢搞,你出圈了你知道吗!!!!

PolarDB VS PostgreSQL  "云上"性能与成本评测 -- PolarDB 比PostgreSQL 好?

临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  Serverless POC测试中有没有坑与发现的疑问

临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处

POLARDB  到底打倒了谁  PPT 分享 (文字版)

POLARDB  -- Ausitndatabases 历年的文章集合

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?


临时工访谈系列

Oracle 文化走后,你我只值9.9元

知人者智,自知者明,琼瑶一路走好

本地存储还有活路吗? 从上周一个供应商问我的问题开始

一年又一年,成了老梆子,别回头,往前看!

临时工说: 实际实例揭穿AI, 上云就不用DBA的谎言

临时工说:DBA 7*24H 给2万的工作,到底去不去?

国内最大IT服务公司-招聘DBA “招聘广告”的变化--分析与探讨

临时工说:  网友问35岁就淘汰,我刚入行DBA 怎么办?

公众号给我两个数字 34.6万,65.5万--告别2024

云不云的,我不晕,从今天起云专栏的喇叭开始广播了。

没有谁是垮掉的一代--记 第四届 OceanBase 数据库大赛

ETL 行业也够卷,云化ETL,ETL 软件不过了

SQL SERVER 系列

SQL SERVER维保AI化,从一段小故事开始

SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗

SQL SERVER 危险中,标题不让发,进入看详情(译)

SQL SERVER 我没有消失,SQL SERVER下一个版本是2025 (功能领先大多数数据库)

SQL SERVER 2022 针对缓存扫描和Query Store 的进步,可以考虑进行版本升级

阿里云系列

阿里云数据库产品权限设计缺陷 ,六个场景诠释问题,你可以做的更好?

阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列

阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列

阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列

阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列


http://www.kler.cn/a/592792.html

相关文章:

  • 华为全流程全要素研发项目管理(81页PPT)(文末有下载方式)
  • 【从零开始学习计算机科学与技术】计算机网络(六)传输层
  • java后端怎么写好根据角色控制查询不同数据,
  • c++图论(三)之图的遍历
  • 【图论】FLOYD弗洛伊德算法-最短路径
  • js给后端发送请求的方式有哪些
  • 【C++】动态规划从入门到精通
  • C++20 中的同步输出流:`std::basic_osyncstream` 深入解析与应用实践
  • IMX335摄像头驱动注册分析
  • AI学习——卷积神经网络(CNN)入门
  • uniapp笔记-底部和首部标签页菜单生成
  • Java基础编程练习第34题-正则表达式
  • 【源码阅读】多个函数抽象为类(实现各种类型文件转为PDF)
  • docker(1) -- centos镜像
  • FOC——Butterworth (巴特沃斯)数字滤波器(2025.03.18)
  • 【sklearn 04】DNN、CNN、RNN
  • 【工具类】Java的 LocalDate 获取本月第一天和最后一天
  • 鸿蒙NEXT项目实战-百得知识库04
  • 网络爬虫【爬虫库request】
  • Rust学习之实现命令行小工具minigrep(一)