简谈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 中的一个配置选项,用于启用逻辑复制(logical replication)功能。逻辑复制是一种高级的数据复制技术,它允许您将变更(例如插入、更新和删除&#…...
自动化巡检实现方法 (一)------- 思路概述
一、自动化巡检需要会的技能 1、因为巡检要求一天24小时全天在线,因此巡检程序程序一定会放在服务器上跑,所以要对linux操作熟悉哦 2、巡检的代码要在git上管理,所以git的基本操作要熟悉 3、为了更方便不会代码的同学操作,所以整个…...
mysql获取时间异常
1.查看系统时间 时区是上海,本地时间正常 [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…...
维基百科文章爬虫和聚类:高级聚类和可视化
一、说明 维基百科是丰富的信息和知识来源。它可以方便地构建为带有类别和其他文章链接的文章,还形成了相关文档的网络。我的 NLP 项目下载、处理和应用维基百科文章上的机器学习算法。 在我的上一篇文章中,KMeans 聚类应用于一组大约 300 篇维基百科文…...
springboot智慧导诊系统源码:根据患者症状匹配挂号科室
一、系统概述 医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什么病,通过智慧导诊系统,可输入自身疾病的症状表现,或选择身体部位,在经由智慧导诊…...
Shell脚本如何使用 for 循环、while 循环、break 跳出循环和 continue 结束本次循环
Shell脚本如何使用 for 循环、while 循环、break 跳出循环和 continue 结束本次循环 下面是一个简单的 Shell 脚本示例,演示了如何使用 for 循环、while 循环、break 跳出循环和 continue 结束本次循环。 #!/bin/bash# For循环 echo "For循环示例:…...
n个人排成一圈,数数123离队
#include<stdio.h> int main() { int i, n100,k0,j0,a[1000]{0};//k:数数123的变量,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 深层网络 浅层神经网络参数过多,导致模型的复杂度和计算量很高,难以训练。而深层…...
【Vue】修改组件样式并动态添加样式
文章目录 目标修改样式动态添加/删除样式样式不生效 注意:类似效果el-step也可以实现,可以不用手动实现。这里只是练习。 目标 使用组件库中的组件,修改它的样式并动态添加/删除样式。 修改样式 组件中的一些类可能添加样式无法生效。如Ele…...
GO设计模式——12、外观模式(结构型)
目录 外观模式(Facade Pattern) 外观模式的核心角色: 优缺点 使用场景 代码实现 外观模式(Facade Pattern) 外观模式(Facade Pattern)又叫作门面模式,是一种通过为多个复杂的子…...
一.初始typescript
什么是ts 首先我们要确认typescript是一个语言,是等同于JavaScript层级得,并不是一些人认为得是JavaScript得类型规范工具或者插件。 ts与js的差异 从type script这个名字就可以看出,ts其实是JavaScript的一个类型化超集,它增…...
mp3的播放
1.这段vue代码会播放声音,但是会有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问题:滑铲
最近想做一个跑酷游戏,从mixamo下载滑铲动作后,出了很多动画的问题。花了两周时间,终于是把所有的问题基本上都解决了。 常见问题: 1.【动画序列】人物不移动。 2.【动画序列】人物移动朝向错误。 3.【蒙太奇】人物移动后会被拉回…...
容器资源视图隔离 —— 筑梦之路
先做个记录,抽空再整理 K8s 部署 Lxcfs 准入控制器,实现容器中资源单独可见 - 「Johny」PlayGround Kubernetes 中利用 LXCFS 控制容器资源可见性 - 码农教程 容器资源可视化隔离的实现方法_51CTO博客_容器隔离技术 Lxcfs在容器集群中的使用-腾讯云开…...
浅析嵌入式GUI框架-LVGL
LVGL (Light and Versatile Graphics Library) 是最流行的免费开源嵌入式图形库,可为任何 MCU、MPU 和显示类型创建漂亮的 UI 嵌入式GUI框架对比 Features/框架LVGLFlutter-elinuxArkUI(鸿蒙OS)AWTKQTMIniGUIemWinuC/GUI柿饼UI跨平台是是鸿蒙OS平台是是是是是是设备…...
Unity 关于SetParent方法的使用情况
在设置子物体的父物体时,我们使用SetParent再常见不过了。 但是通常我们只是使用其中一个语法: public void SetParent(Transform parent);使用改方法子对象会保持原来位置,跟使用以下方法效果一样: public Transform tran; ga…...
Linux系统上RabbitMQ安装教程
一、安装前环境准备 Linux: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)首先&a…...
ES通过抽样agg聚合性能提升3-5倍
一直以来,es的agg聚合分析性能都比较差(对应sql的 group by)。特别是在超多数据中做聚合,在搜索的条件命中特别多结果的情况下,聚合分析会非常非常的慢。 一个聚合条件:聚合分析请求的时间 search time a…...
c++详解栈
一.什么是栈 堆栈又名栈(stack),它是一种运算受限的数据结构(线性表),只不过他和数组不同,数组我们可以想象成一个装巧克力的盒子,你想拿一块巧克力,不需要改变其他巧克…...
Zabbix结合Grafana打造高逼格监控系统
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
