逻辑复制
是一种将数据库修改提取到离散元素流(例如元组数据或 SQL 命令)的方法,然后可以将其回放回不同的数据存储库,该存储库可以是另一个 PostgreSQL 实例或能够处理来自 输出插件
数据的其他应用程序。
在 PostgreSQL 9.4 中添加了对通过 逻辑解码
输出插件
进行 逻辑复制
的初始支持,并在 PostgreSQL 10 中添加了对 PostgreSQL 实例之间逻辑复制的支持。
配置
以下 配置参数 特定于 逻辑复制
debug_logical_replication_streaming
(PostgreSQL 16 ~)logical_decoding_work_mem
(PostgreSQL 13 ~)
max_logical_replication_workers
(PostgreSQL 10 ~)
max_parallel_apply_workers_per_subscription
(PostgreSQL 16 ~)max_sync_workers_per_subscription
(PostgreSQL 10 ~)
变更历史
正在开发中
- PostgreSQL 17
pg_upgrade
支持逻辑复制槽的迁移 (提交 29d0a77f)- 二进制升级现在可以保留订阅的完整状态 (提交 9a17be1e)
- PostgreSQL 16
- 发布 可以包含来自同一模式的模式和单个表 (提交 13a185f5)
- 可以创建跳过具有复制来源的数据的订阅 (提交 36628396)
- 并行工作者应用的大型事务 (提交 216a7848)
- 添加回调
ReorderBufferUpdateProgressTxnCB
以避免在长时间运行的 DDL 操作期间出现逻辑复制超时风险 (提交 8c58624d) - 添加等待事件
LogicalApplySendData
(提交 fce003cf) - 在应用
UPDATE
/DELETE
期间,可以在订阅者上使用除PRIMARY KEY
或REPLICA IDENTITY
之外的索引 (提交 89e46da5)) - 现在可以以二进制格式复制表 (提交 ecb69652)
- 逻辑复制现在作为表所有者执行 (提交 1e10d49b)
- 现在在备用服务器上支持逻辑解码 (提交 0fdab27a)
- 逻辑复制槽现在可以失效 (提交 be87200e)
- PostgreSQL 15
- PostgreSQL 14
- 数据可以以二进制格式传输 (提交 9de77b54)
- 添加了对正在进行的事务流的支持 (提交 46482432)
- 输出插件 API 现在能够解码预备事务 (提交 0aa8a01d)
- 添加函数
pg_xact_commit_timestamp_origin()
(提交 b1e48bbe) - 函数
pg_last_committed_xact()
现在也返回复制来源 ID (提交 b1e48bbe) - 在表同步期间允许多个事务 (提交 ce0fdbfe)
- PostgreSQL 13
- 配置参数
logical_decoding_work_mem
已添加 (提交 cec2edfa)
- 配置参数
- PostgreSQL 12
- 逻辑复制槽现在可以复制 (提交 9f06d79e)
- PostgreSQL 11
- PostgreSQL 10
- PostgreSQL 9.6
- PostgreSQL 9.5
- 添加了复制来源进度跟踪基础结构 (提交 5aa23504)
- PostgreSQL 9.4
- 添加了对通过
输出插件
进行逻辑解码
的支持 (提交 b89e1510) - 在
wal_level
中添加了logical
设置 (提交 e55704d8) - 可以通过
ALTER TABLE ... REPLICA IDENTITY ...
指定复制标识列 (初始提交 07cacba9) - relopt
user_catalog_table
已添加(提交 66abc260) - 核心实用程序
pg_recvlogical
已添加(初始提交 8bdd12bb) test_decoding
模块已添加(提交 b89e1510)
- 添加了对通过
参考文献
- PostgreSQL 文档: 逻辑复制
有用链接
- 逻辑复制的演变 - Amit Kapila 于 2023 年 9 月撰写的博客文章
- PostgreSQL 中的逻辑复制内部:工作原理 - Vignesh C / 富士通于 2023 年 3 月撰写的博客文章