如何在PostgreSQL中利用逻辑复制捕获并同步INSERT/UPDATE增量?

胖墨大大_8783

胖墨大大_8783

2026-06-24

316人浏览

原创

postgresql逻辑复制默认同步insert/update/delete,若只同步insert和update需显式指定publish='insert,update';update依赖主键或replica identity,无主键表须设full或添加唯一索引。

如何在postgresql中利用逻辑复制捕获并同步insert/update增量?

能捕获并同步 INSERT/UPDATE 增量,但默认也会同步 DELETE —— 除非你显式排除它。 PostgreSQL 逻辑复制不支持“只同步 INSERT 和 UPDATE 而自动忽略 DELETE”的开箱即用配置;必须在创建 PUBLICATION 时明确指定操作类型,否则默认包含全部(INSERT/UPDATE/DELETE)。

CREATE PUBLICATION 时必须指定 FOR TABLE ... WITH (publish = 'insert,update')

PostgreSQL 的 PUBLICATION 默认行为是 publish = 'insert,update,delete'。若只想同步 INSERT 和 UPDATE,需显式声明:

  • CREATE PUBLICATION my_pub FOR TABLE users WITH (publish = 'insert,update');
  • 不能写成 publish = 'insert update'(缺少逗号会报错 syntax error at or near "update")
  • 大小写不敏感,但建议统一用小写;空格仅用于分隔,不可省略逗号
  • 一旦发布创建完成,ALTER PUBLICATION ... SET (publish = ...) 不支持修改该参数(PG 16 及之前版本),只能 DROP 后重建

订阅端收到的变更严格受限于发布端的 publish 设置

发布端设为 insert,update 后,订阅端 pg_replication_origin_status 或日志中将完全看不到对应表的 DELETE 操作记录。这不是过滤或丢弃,而是发布端根本未生成这些变更事件。

Hotpot AI Background Remover
Hotpot AI Background Remover

一款由Hotpot AI提供的图片背景移除工具,可自动识别前景主体并清除背景,帮助用户快速准备图片设计素材。

下载
  • 验证方式:在发布端执行 DELETE FROM users WHERE id = 1;,再查订阅端该行是否残留 —— 它会保留,且不会报冲突(因为没收到 DELETE)
  • 注意:如果订阅端表有 ON DELETE CASCADE 外键,该级联行为仍会发生,但这与逻辑复制无关,是本地约束触发的
  • 若后续需要补发 DELETE,必须重建 publication 并重新初始化订阅(WITH (copy_data = false, create_slot = true) 可跳过全量,但需手动处理存量数据一致性)

UPDATE 捕获依赖主键或 REPLICA IDENTITY

逻辑复制对 UPDATE 的识别依赖行标识能力。若表无主键或唯一索引,PostgreSQL 默认无法精确定位被更新的行,会导致同步失败或数据错乱。

  • 错误现象:ERROR: logical replication cannot replicate tables without primary keys or replica identity
  • 解决路径二选一:
    – 添加主键或非空唯一索引(推荐)
    – 或执行 ALTER TABLE users REPLICA IDENTITY FULL;(将整行作为标识,但显著增加 WAL 体积和网络带宽)
  • REPLICA IDENTITY USING INDEX 仅在 PG 14+ 支持,需确保索引列非空且唯一
  • 执行 REPLICA IDENTITY 修改后,已有 subscription 不会自动生效,需 ALTER SUBSCRIPTION ... REFRESH PUBLICATION 触发重同步元信息

增量同步延迟与监控关键点

逻辑复制的增量延迟不是靠“时间差”判断,而是比对 LSN 和 origin 进度。容易忽略的是:即使没有新变更,pg_replication_origin_advance() 也可能滞后。

  • 检查延迟:在订阅端运行 SELECT * FROM pg_stat_subscription;,重点关注 last_msg_send_time 和 last_msg_receipt_time 差值,以及 latest_end_lsn 是否停滞
  • 真正卡住的表现是 pg_replication_origin_status 中 replay_lsn 长期不推进,而非单纯看时间戳
  • 若发现 UPDATE 同步慢,先确认发布端是否有长事务阻塞 WAL 清理(pg_stat_activity 查 backend_type = 'client backend' 且 state = 'idle in transaction')
  • 避免在高并发 UPDATE 场景下使用 REPLICA IDENTITY FULL,它会使单条 UPDATE 产生数倍 WAL 数据量

真正麻烦的不是配置本身,而是当业务要求“只同步新增和修改”时,DELETE 被静默忽略可能掩盖上游误删问题;上线前务必用真实 DELETE 场景做端到端验证,而不是只测 INSERT/UPDATE。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

4856

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1249

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

243

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

466

22

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.10

213

5

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4389

19

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。更详细的postgresql常用命令,大家可以访问下面的文章。

2023.11.16

627

3

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有\l、\d、\d5、\di、\ds、\dv、\df、\dn、\db、\dg、\dp、\c、\pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

2023.11.20

1376

6

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

2026.02.12

460

19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习