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

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


http://www.kler.cn/news/161007.html

相关文章:

  • RT_Thread_使用FAL组件配置stm32f407片上flash读写
  • 亚马逊云科技re:Invent,生成式AI正在彻底改变开发者的工作方式
  • 无与伦比的夜景增强技术解决方案
  • 【智能家居】二、添加火灾检测模块(烟雾报警功能点)
  • 普华永道:国有企业要动态布局和管理供应商资源池
  • 【c】杨辉三角
  • FreeRTOS系统延时函数分析
  • Large Language Models areVisual Reasoning Coordinators
  • 优思学院|六西格玛质量管理的工具、方法和手段
  • 在Spring Boot中使用JavaMailSender发送邮件
  • 概念理论类-k8s :架构篇
  • UML图部分总结
  • 练习-java输入输出之文件字节io流之合并文件
  • leetcode:93. 复原 IP 地址
  • 要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 21 章:课程学习提示
  • 聊聊java的两种锁同步锁和重入锁
  • 【Element-ui】Layout与Container组件
  • Python版本与opencv版本的对应关系
  • FFmpeg之将视频转为16:9(横屏)或9:16(竖屏)(三十六)
  • BCI-Two-streams hypothesis(双流假说)
  • 2022年全国大学生数据分析大赛医药电商销售数据分析求解全过程论文及程序
  • Vector Quantized Diffusion Model for Text-to-Image Synthesis
  • 【高数:1 映射与函数】
  • DS1307时钟模块使用记录
  • C:算术移位和逻辑移位傻傻分不清楚
  • 智慧农业技术解决方案:PPT全文32页,附下载
  • 两种做法——判断是否是二叉搜索树
  • 【Proteus仿真】【STM32单片机】简易计算器
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • 什么是堆内存?参数如何设置?