逻辑复制
是一种将数据库修改提取到离散元素(如元组数据或 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 18
- 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)
- 逻辑复制槽位现在可以由于地平线或
wal_level
而失效(提交be87200e)
- PostgreSQL 15
- PostgreSQL 14
- 数据可以以二进制格式传输(提交9de77b54)
- 添加了对正在进行的事务流式传输的支持(提交46482432)
- 输出插件 API 现在能够解码预备事务(提交0aa8a01d)
- 添加函数
pg_xact_commit_timestamp_origin()
(提交b1e48bbe) - 函数
pg_last_committed_xact()
现在也返回复制源 ID(提交b1e48bbe) - 在表同步期间允许多个事务(提交ce0fdbfe)
- PostgreSQL 13
- 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 月发表的博文