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

简谈PostgreSQL的wal_level=logic

一、PostgreSQL的wal_level=logic的简介

`wal_level=logic` 是 PostgreSQL 中的一个配置选项,用于启用逻辑复制(logical replication)功能。逻辑复制是一种高级的数据复制技术,它允许您将变更(例如插入、更新和删除)从一个 PostgreSQL 数据库复制到另一个数据库,而不仅仅是将整个数据文件复制到另一个服务器。

启用逻辑复制后,PostgreSQL 将在事务日志(WAL)中记录更改,并将更改发送给订阅者,让其按照相同的顺序应用更改。这种方式可以更灵活地复制部分数据或特定类型的更改,并且可以在不同版本的 PostgreSQL 之间进行复制。

`wal_level=logic` 的配置选项告诉 PostgreSQL 使用逻辑复制模式。在此模式下,PostgreSQL 将在事务日志中记录完整的 SQL 语句,并将其发送给订阅者,从而使其能够准确地重现修改操作。

启用逻辑复制需要在主服务器和目标服务器上创建复制槽,并使用适当的命令来启动逻辑复制进程。一旦启用了逻辑复制,主服务器上的任何更改都将通过复制进程传输到目标服务器上。

逻辑复制在许多场景下很有用,例如实时数据备份、分布式系统和数据分析。它提供了更高级的复制和数据同步功能,使您能够更好地管理和利用 PostgreSQL 数据库的复制能力。

二、PostgreSQL开启wal_level=logic的步骤

要在 PostgreSQL 中启用逻辑复制(logical replication),您需要执行以下步骤:

1. 编辑 PostgreSQL 的配置文件 postgresql.conf。您可以使用命令 `sudo vim $PGDATA/postgresql.conf` 来打开文件。

2. 在配置文件中查找 `wal_level` 参数,并将其设置为 `logical`。如果找不到该参数,您可以在文件的末尾添加以下行:

wal_level = logical

或者直接在psql中执行

alter system set wal_level='logical';

 3. 保存并关闭配置文件。

4. 重新启动 PostgreSQL 服务器以应用更改。您可以使用以下命令重启 PostgreSQL 服务:

sudo systemctl restart postgresql

5. 确保您在主服务器和要进行逻辑复制的目标服务器上都启用了逻辑复制功能。您可以在 PostgreSQL 的配置文件中找到以下配置项,确保两个服务器上都已启用:

max_replication_slots = <desired_number_of_replication_slots>
max_wal_senders = <desired_number_of_wal_senders>

   `<desired_number_of_replication_slots>` 是您希望为逻辑复制使用的复制槽数量,`<desired_number_of_wal_senders>` 是您希望为逻辑复制使用的 WAL 发送进程数量。

6. 在主服务器上创建逻辑复制槽。您可以使用以下命令在主服务器上创建复制槽:

CREATE_REPLICATION_SLOT <slot_name> LOGICAL pgoutput;

   `<slot_name>` 是您为复制槽指定的名称。

7. 在目标服务器上创建逻辑复制槽。您可以使用以下命令在目标服务器上创建复制槽:

CREATE_REPLICATION_SLOT <slot_name> LOGICAL pgoutput;

   `<slot_name>` 是与主服务器上创建的复制槽名称相同的名称。

8. 启动逻辑复制进程。在目标服务器上,您可以使用以下命令启动逻辑复制进程:

START_REPLICATION SLOT <slot_name> LOGICAL <starting_position>;

   `<slot_name>` 是您在目标服务器上创建的复制槽名称,`<starting_position>` 是您希望从主服务器复制的起始位置。

现在,您已经成功地在 PostgreSQL 中启用了逻辑复制。主服务器上的更改将通过逻辑复制传输到目标服务器上。请注意,逻辑复制可能会对系统性能产生一定影响,因此在进行大规模的逻辑复制操作时,需谨慎评估系统的负载和性能。

三、开启wal_level=logical模式的优点

1. 灵活性:逻辑复制允许选择哪些表和数据进行复制。与物理复制相比,它提供了更大的灵活性,可以根据需求选择性地复制数据。

2. 多版本并发控制 (MVCC):逻辑复制可以在源数据库和目标数据库之间实现MVCC。这意味着源数据库在复制操作期间可以继续正常运行,不会阻塞其他事务的执行。

3. 跨版本兼容性:逻辑复制可以在不同版本的PostgreSQL之间进行复制。这对于升级或迁移数据库非常有用,可以在不同版本之间进行平滑的数据迁移。

4. 多节点复制:逻辑复制支持多节点复制,即一个源数据库可以同时复制到多个目标数据库。这可以实现数据的分发和同步,从而提供更高的可用性和数据复制的冗余。

5. 逻辑补充:逻辑复制可以补充物理复制的功能。它允许在源数据库和目标数据库之间执行更复杂的数据转换和处理,例如数据清理、数据过滤和数据转换等。

四、开启wal_level=logical模式的缺点

1. 性能开销:逻辑复制相对于物理复制来说,通常会有更大的性能开销。逻辑复制需要对数据进行解析、转换和重新构建,这会增加系统的负载和延迟。

2. 数据一致性:由于逻辑复制是基于逻辑解析和转换的,可能存在数据一致性的问题。在复制过程中,如果有复杂的数据转换或处理操作,可能会导致数据的不一致性。

3. 配置复杂性:逻辑复制的配置相对较复杂,需要进行更多的设置和参数调整。这可能需要更多的时间和努力来进行配置和管理。

4. 兼容性限制:逻辑复制可能对所使用的PostgreSQL版本和插件有一定的兼容性限制。不同版本之间的差异或插件的不兼容可能导致复制操作无法正常进行。

5. 数据库结构变更限制:逻辑复制对数据库结构变更有一定的限制。某些结构变更可能无法正确地复制,需要额外的手动操作或配置来实现。

相关文章:

简谈PostgreSQL的wal_level=logic

一、PostgreSQL的wal_levellogic的简介 wal_levellogic 是 PostgreSQL 中的一个配置选项&#xff0c;用于启用逻辑复制&#xff08;logical replication&#xff09;功能。逻辑复制是一种高级的数据复制技术&#xff0c;它允许您将变更&#xff08;例如插入、更新和删除&#…...

自动化巡检实现方法 (一)------- 思路概述

一、自动化巡检需要会的技能 1、因为巡检要求一天24小时全天在线&#xff0c;因此巡检程序程序一定会放在服务器上跑&#xff0c;所以要对linux操作熟悉哦 2、巡检的代码要在git上管理&#xff0c;所以git的基本操作要熟悉 3、为了更方便不会代码的同学操作&#xff0c;所以整个…...

mysql获取时间异常

1.查看系统时间 时区是上海&#xff0c;本地时间正常 [roottest etc]# timedatectlLocal time: 一 2023-12-04 17:00:35 CSTUniversal time: 一 2023-12-04 09:00:35 UTCRTC time: 一 2023-12-04 09:00:34Time zone: Asia/Shanghai (CST, 0800)NTP enabled: no NTP synchroni…...

维基百科文章爬虫和聚类:高级聚类和可视化

一、说明 维基百科是丰富的信息和知识来源。它可以方便地构建为带有类别和其他文章链接的文章&#xff0c;还形成了相关文档的网络。我的 NLP 项目下载、处理和应用维基百科文章上的机器学习算法。 在我的上一篇文章中&#xff0c;KMeans 聚类应用于一组大约 300 篇维基百科文…...

springboot智慧导诊系统源码:根据患者症状匹配挂号科室

一、系统概述 医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号&#xff0c;在就诊的过程中有许多患者不知道需要挂什么号&#xff0c;要看什么病&#xff0c;通过智慧导诊系统&#xff0c;可输入自身疾病的症状表现&#xff0c;或选择身体部位&#xff0c;在经由智慧导诊…...

Shell脚本如何使用 for 循环、while 循环、break 跳出循环和 continue 结束本次循环

Shell脚本如何使用 for 循环、while 循环、break 跳出循环和 continue 结束本次循环 下面是一个简单的 Shell 脚本示例&#xff0c;演示了如何使用 for 循环、while 循环、break 跳出循环和 continue 结束本次循环。 #!/bin/bash# For循环 echo "For循环示例&#xff1a;…...

n个人排成一圈,数数123离队

#include<stdio.h> int main() { int i, n100,k0,j0,a[1000]{0};//k&#xff1a;数数123的变量&#xff0c;j记录离开队列人数的变量scanf("%d",&n);for(int ii0; ii<n; ii){ for( i0; i<n; i){// printf("wei%d ",i);if((a[i]0)&&…...

深度学习基础回顾

深度学习基础 浅层网络 VS 深层网络深度学习常用的激活函数Sigmoid 函数ReLU 函数Softplus 函数tanh函数 归纳偏置CNN适用数据归纳偏置 RNN适用数据归纳偏置 浅层网络 VS 深层网络 浅层神经网络参数过多&#xff0c;导致模型的复杂度和计算量很高&#xff0c;难以训练。而深层…...

【Vue】修改组件样式并动态添加样式

文章目录 目标修改样式动态添加/删除样式样式不生效 注意&#xff1a;类似效果el-step也可以实现&#xff0c;可以不用手动实现。这里只是练习。 目标 使用组件库中的组件&#xff0c;修改它的样式并动态添加/删除样式。 修改样式 组件中的一些类可能添加样式无法生效。如Ele…...

GO设计模式——12、外观模式(结构型)

目录 外观模式&#xff08;Facade Pattern&#xff09; 外观模式的核心角色&#xff1a; 优缺点 使用场景 代码实现 外观模式&#xff08;Facade Pattern&#xff09; 外观模式&#xff08;Facade Pattern&#xff09;又叫作门面模式&#xff0c;是一种通过为多个复杂的子…...

一.初始typescript

什么是ts 首先我们要确认typescript是一个语言&#xff0c;是等同于JavaScript层级得&#xff0c;并不是一些人认为得是JavaScript得类型规范工具或者插件。 ts与js的差异 从type script这个名字就可以看出&#xff0c;ts其实是JavaScript的一个类型化超集&#xff0c;它增…...

mp3的播放

1.这段vue代码会播放声音&#xff0c;但是会有audio标签 <template><div><audio id"myAudio" controls><source src"./test.mp3" type"audio/mp3" />Your browser does not support the audio tag.</audio></…...

mixamo根动画导入UE5问题:滑铲

最近想做一个跑酷游戏&#xff0c;从mixamo下载滑铲动作后&#xff0c;出了很多动画的问题。花了两周时间&#xff0c;终于是把所有的问题基本上都解决了。 常见问题&#xff1a; 1.【动画序列】人物不移动。 2.【动画序列】人物移动朝向错误。 3.【蒙太奇】人物移动后会被拉回…...

容器资源视图隔离 —— 筑梦之路

先做个记录&#xff0c;抽空再整理 K8s 部署 Lxcfs 准入控制器&#xff0c;实现容器中资源单独可见 - 「Johny」PlayGround Kubernetes 中利用 LXCFS 控制容器资源可见性 - 码农教程 容器资源可视化隔离的实现方法_51CTO博客_容器隔离技术 Lxcfs在容器集群中的使用-腾讯云开…...

浅析嵌入式GUI框架-LVGL

LVGL (Light and Versatile Graphics Library) 是最流行的免费开源嵌入式图形库&#xff0c;可为任何 MCU、MPU 和显示类型创建漂亮的 UI 嵌入式GUI框架对比 Features/框架LVGLFlutter-elinuxArkUI(鸿蒙OS)AWTKQTMIniGUIemWinuC/GUI柿饼UI跨平台是是鸿蒙OS平台是是是是是是设备…...

Unity 关于SetParent方法的使用情况

在设置子物体的父物体时&#xff0c;我们使用SetParent再常见不过了。 但是通常我们只是使用其中一个语法&#xff1a; public void SetParent(Transform parent);使用改方法子对象会保持原来位置&#xff0c;跟使用以下方法效果一样&#xff1a; public Transform tran; ga…...

Linux系统上RabbitMQ安装教程

一、安装前环境准备 Linux&#xff1a;CentOS 7.9 RabbitMQ Erlang 1、系统内须有C等基本工具 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz socat2、下载安装包 1&#xff09;首先&a…...

ES通过抽样agg聚合性能提升3-5倍

一直以来&#xff0c;es的agg聚合分析性能都比较差&#xff08;对应sql的 group by&#xff09;。特别是在超多数据中做聚合&#xff0c;在搜索的条件命中特别多结果的情况下&#xff0c;聚合分析会非常非常的慢。 一个聚合条件&#xff1a;聚合分析请求的时间 search time a…...

c++详解栈

一.什么是栈 堆栈又名栈&#xff08;stack&#xff09;&#xff0c;它是一种运算受限的数据结构&#xff08;线性表&#xff09;&#xff0c;只不过他和数组不同&#xff0c;数组我们可以想象成一个装巧克力的盒子&#xff0c;你想拿一块巧克力&#xff0c;不需要改变其他巧克…...

Zabbix结合Grafana打造高逼格监控系统

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...