用途:在发布端与订阅端之间做逻辑复制。逻辑复制按行解码 WAL,只发送单行变更,可按表选择,跨大版本与平台,是近零停机升级和选择性数据分发的基础。发布端需 wal_level = logical。发布(CREATE PUBLICATION)指定表集合及发送哪些 DML;订阅(CREATE SUBSCRIPTION)连接后在发布端创建复制槽并开始应用变更,默认先复制已有行(copy_data = true)。
主要能力:按表、列或行过滤复制(行过滤与列清单为 v15+,FOR TABLES IN SCHEMA 同为 v15+);v16 支持从备库逻辑解码、双向复制与并行应用;v17 提供 pg_createsubscriber 与故障转移槽。
必要用法:表若无主键而需复制 UPDATE/DELETE,须设置 REPLICA IDENTITY FULL 或 USING INDEX,否则变更静默不复制、发布端报错;含 UPDATE/DELETE 的发布中,行过滤或列清单不得使用非 REPLICA IDENTITY 列;建订阅创建槽时不得置于事务块内;删除订阅应使用 DROP SUBSCRIPTION,不可用时可先 ALTER SUBSCRIPTION ... SET (slot_name = NONE) 再手动 pg_drop_replication_slot。
适用场景:复制表子集或列子集、用逻辑复制做近零停机大版本升级、选择或修正 REPLICA IDENTITY、编写发布订阅语句、排查订阅停止或发布端 WAL 增长、使用 v15+ 行过滤与列清单、构建双向复制或用 pg_createsubscriber 转换物理备库。
限制:不复制 DDL,模式变更须在两端手动执行(新增列先在订阅端);不复制序列,订阅端序列停留在起始值;物理/流复制与热备、PITR、pg_basebackup、WAL 归档、连接池不由本技能处理;复制槽会保留 WAL,被遗弃的槽会导致发布端磁盘写满。资料中还给出模式代码与反模式清单,可参考 references 中的 methods.md、examples.md、anti-patterns.md。