讲师中心 微信公众号
AI工具推荐 视频效率加速

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

胖墨大大_8783

胖墨大大_8783

发布时间:2026-06-24 14:41:08

|

316人浏览过

|

来源于php中文网

原创

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 操作记录。这不是过滤或丢弃,而是发布端根本未生成这些变更事件。

  • 验证方式:在发布端执行 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。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

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

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

4856

2023.06.21

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

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

1249

2025.12.08

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

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

243

2026.01.05

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

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

466

2026.01.05

postgresql常用命令
postgresql常用命令

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

213

2023.10.10

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

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

4389

2023.11.02

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

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

627

2023.11.16

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的相关内容,可以阅读本专题下面的文章。

1376

2023.11.20

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 183人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn