首页 > 数据库 >PostgreSQL逻辑复制常见错误以及处理方式

PostgreSQL逻辑复制常见错误以及处理方式

时间:2024-10-27 15:01:49浏览次数:1  
标签:订阅 逻辑 PostgreSQL -- 复制 db01 节点 subscription

  在PostgreSQL和SQLServer中,有一个共同的特点,相比如物理复制,逻辑复制可能会存在较多的一些细节和可能错误的发生,作为SQLServer Replication(逻辑复制)的深入用户,有必要深入学习试验一下PostgreSQL的逻辑复制的一些细节。  

订阅端的主要订阅选项信息

create subscription slave_db01_subscription 
connection 'host=192.168.152.100 port=1234 dbname=db01 user=replica_user  password=A-Strong-Password' 
publication master_db01_pulication 
with (    
        enabled = true,                                    --创建完订阅之后是否启动订阅,默认即为启动
        create_slot = false,                                --(发布节点上)是否自动创建复制槽,如果发布节点上已经有了复制槽,就不用创建,如果没有,则这里必须设置为创建。
        slot_name = db01_logic_replication_slot01,          --复制槽名称
        binary = true                                  --是否以二进制格式传输数据,二进制格式比文本格式传输效率更高
        
        copy_data = true,                               --如果是true,会初始化发布节点已有数据;
                                                            --如果是false,不会初始化发布节点已有数据,比如重建订阅的时候,如果相关的表已有数据,可以不用重新初始化数据
        
        synchronous_commit  = remote_apply,                 --提交模式,可选为off, local, remote_write, remote_apply, or on,含义同物理复制类似
        
        streaming = parallel,                            --以流格式传输数据,off|on|parallel,off会等待主节点上所有数据写入完成之后统一发送,on会一直传输主节点日志,
                                                            --发布端事务未提交之前就开始传递日志,在订阅节点上,非完整日志先换存在本地,等主节点提交之后,日志完成之后当前节点再apply日志
                                                            --parallel模式,会基于max_parallel_apply_workers_per_subscription做并行apply
    );

订阅的删除

-- 删除之前先取消订阅与复制槽之间的关联,取消关联之前先disable订阅,所以一下是一个完整的删除订阅的步骤
alter subscription slave_db01_subscription disable;
alter subscription slave_db01_subscription SET (slot_name = NONE);
drop subscription slave_db01_subscription;

 

常见逻辑复制错误以及处理

1,订阅端连接到发布端的账号权限不足

2024-10-24 22:14:26.922 CST [823145] ERROR: could not start initial contents copy for table "public.t2": ERROR: permission denied for table t2

订阅节点连接串中的账号没有发布数据库的读的权限,需要再发布数据库上赋读权限, grant select on XXX|all tables in schema public to replica_user;

 

2,订阅端表中已存在主键冲突的数据

2024-10-24 22:19:41.567 CST [824794] ERROR: duplicate key value violates unique constraint "t1_pkey"

2024-10-24 22:19:41.567 CST [824794] DETAIL: Key (c1)=(1) already exists.

2024-10-24 22:19:41.567  CST [2148903] CONTEXT:  processing remote data for replication origin "pg_41023" during message type "INSERT" for replication target relation "public.t1" in transaction 796, finished at 0/9A036598

--需要设置log_min_messages = info        

这种错误可能发生在第一次做数据初始化的时候,也可能发生在逻辑复制的运行过程中,从节点中已经存在了与主节点主键冲突的数据,有两种方式来处理这种错误

1,忽略订阅端的数据:需在再订阅节点删除订阅表中对应key的整条数据即可。

2,保留订阅端的数据:订阅端跳过事务 ALTER SUBSCRIPTION mysub SKIP (lsn = '0/9A036598');

 

3,订阅端表缺少字段

2024-10-24 22:26:33.107 CST [826947] ERROR: logical replication target relation "public.t1" is missing replicated column: "c5"

订阅端表缺少部分字段,需要增加相关字段

 

 

 

参考: 逻辑复制:https://www.postgresql.org/docs/16/sql-createsubscription.html 逻辑复制冲突处理:https://www.postgresql.fastware.com/blog/addressing-replication-conflicts-using-alter-subscription-skip postgresql逻辑复制介绍:https://illuminatedcomputing.com/posts/2024/10/logical-replication/|
逻辑复制常见错误:https://blog.csdn.net/qq_38626589/article/details/108217681      

标签:订阅,逻辑,PostgreSQL,--,复制,db01,节点,subscription
From: https://www.cnblogs.com/wy123/p/18508365

相关文章

  • 人工智能_神经网络103_感知机_感知机工作原理_感知机具备学习能力_在学习过程中自我调
    由于之前一直对神经网络不是特别清楚,尤其是对神经网络中的一些具体的概念,包括循环,神经网络卷积神经网络以及他们具体的作用,都是应用于什么方向不是特别清楚,所以现在我们来做教程来具体明确一下。当然在机器学习之后还有深度学习,然后在深度学习中对各种神经网络的探讨就会比较......
  • PostgreSQL 16逻辑复制改进 (译)
    原文地址:https://www.pgedge.com/blog/postgresql-16-logical-replication-improvements-in-action 我之前简要介绍了PostgreSQL中的复制方法,并概述了PostgreSQL16中逻辑复制的一些关键特性。在这篇博客中,我将深入探讨逻辑复制的几个性能特性,展示这些特性在实际操作中的步骤,并......
  • 【matlab代码】3个模型的IMM例程(匀速、左转、右转),附源代码(可复制粘贴)
    文章目录3个模型的IMM源代码运行结果代码介绍总结3个模型的IMM代码实现了基于IMMIMMIMM(InteractingMultipleModel)算法的目标跟踪。它使用三种不同的运动模型(匀速直线运动、左转弯和右转弯)来预测目标的位置,并通过卡尔曼滤波进行状......
  • js逆向实战之某天下登陆参数pwd加密逻辑
    声明:本篇文章仅用于知识分享,不得用于其它用途网址:https://passport.fang.com/加密逻辑随便输入用户名和密码,看触发的数据包。可以看到pwd明显被加密了,全局搜索url中的关键字loginwithpwdStrong.api。只有两处,全部打上断点,重新登录一次,看触发哪个。触发了jquery这里,并且......
  • Docker部署MySQL主从复制
    1.主从复制概念及优势1.1概念MySQL主从复制是一种数据库复制技术,它允许将一个数据库服务器(主服务器)上的数据更改复制到一个或多个数据库服务器(从服务器)。这种技术在数据库管理和维护中扮演着重要的角色,尤其是在需要数据冗余、负载均衡和高可用性的场景中。主从复制的概念......
  • 03 布尔逻辑与逻辑门
    晶体管二进制,只显示两种信号状态,电路连接为真,电路断开为假,成千上万的晶体管中同时多状态容易出错布尔提出逻辑运算:输入真与假,对输入进行not,and,or的运算,产生输出晶体管控制线通电,将控制线作为input,来电一极连接导出线作为output,控制线通电on电流可以从晶体管线路贯穿走而......
  • 【MySQL数据库】MySQL主从复制
    文章目录MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式MySQL主从复制实验环境准备关闭防火墙和SELinux时间同步主服务器设置从服务器设置MySQL主从复制配置主服务器配置从服务器配置(以Slave1为例,Slave2配置......
  • 深度解读:PostgreSQL执行计划的高效优化指南
    全文目录:开篇语前言:为何要解读PostgreSQL执行计划?......
  • [超详细有案例]理解白盒测试的5种逻辑覆盖
    [超详细有案例]理解白盒测试的5种逻辑覆盖    白盒测试是穷举路径测试,在逻辑覆盖中有6种,分别是语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,组合覆盖,路径覆盖,下面我将以每种覆盖的定义,实例讲解,优点,缺点了帮助大家理解。(1)语句覆盖        语句覆盖是最起码的结构覆......
  • 镜像和复制的区别
    在数据管理和信息技术领域,镜像和复制是两种常用的数据保护和冗余策略。尽管它们的目的相似,即确保数据的安全和可访问性,但它们在实现方法、应用场景和性能方面存在显著差异。本文旨在探讨镜像和复制之间的主要区别,包括:1.技术定义和基本概念;2.实施方式和过程;3.数据一致性和恢复时间......