0Pricing
SQL Academy · 课时

用于分片的逻辑复制

使用 PUBLICATION/SUBSCRIPTION 逻辑复制在集群之间迁移表,并支持大版本升级

用于分片的逻辑复制 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

逻辑复制与物理复制

物理复制 WAL 的 BYTES——整个集群使用相同版本。逻辑复制复制 ROWS——可以选择特定的表,也可以跨 PG 版本复制:

  • 订阅特定的表
  • 支持从 PG 14 → PG 16 复制(可用于升级)
  • 谨慎实现双向或多主复制
  • 允许使用不同的架构

设置:发布者

将主库标记为发布者:

-- postgresql.conf
wal_level = logical

-- Create a publication:
CREATE PUBLICATION pub_orders FOR TABLE orders, order_items;

-- Or all tables in the database:
CREATE PUBLICATION pub_all FOR ALL TABLES;

设置:订阅者

在目标数据库中:

CREATE SUBSCRIPTION sub_orders
  CONNECTION 'host=primary port=5432 user=repl dbname=mydb'
  PUBLICATION pub_orders;

初始同步

订阅会先复制所有匹配的表,然后流式传输变更。目标架构必须与源架构匹配。

使用场景:大版本升级

逻辑复制是以最短停机时间升级 PostgreSQL 的现代方式:

  1. 构建 PG16 集群
  2. 将 PG14 逻辑复制到 PG16
  3. 等 PG16 追上进度后切换应用
  4. 关闭 PG14

使用场景:拆分数据库

要将一个巨型数据库拆分成多个较小的数据库:

  1. 只发布新服务需要的表
  2. 在新数据库中订阅
  3. 追上进度后迁移写入操作

使用场景:异构副本

可以复制到使用不同索引的读副本,也可以复制到包含额外报表列的数据仓库 PostgreSQL。

冲突

逻辑复制不会自动解决冲突。如果同一行在两端都被更新,订阅者会因错误而停止。可以通过以下方式避免:

  • 只向一端写入
  • 使用 REPLICA IDENTITY FULL 以获得更好的诊断信息
  • 手动解决冲突,然后重新启动订阅

架构变更

DDL 不会被复制。请在两端手动应用架构变更——通常先应用到订阅者,再应用到发布者。也可以使用 pglogical 扩展来复制 DDL。

部分复制

现代 PG 允许为每个发布配置行筛选条件和列列表:

CREATE PUBLICATION us_only FOR TABLE customers
  WHERE (country = 'US');

CREATE PUBLICATION compact FOR TABLE users (id, email);

使用逻辑复制进行分片

将租户迁移到专用分片:

  1. 在源端创建一个仅筛选一个租户的发布
  2. 从目标端进行订阅
  3. 将应用切换到新分片
  4. 删除源端的租户数据

性能与延迟

逻辑复制通常按每个订阅单线程运行。高吞吐量源端可能受益于多个发布和订阅,或使用 pglogical / Debezium 等第三方工具。

回顾

逻辑复制支持按行进行流式复制。

  • 支持跨版本和部分表复制
  • 以最短停机时间完成大版本升级
  • 冲突解决由您负责
  • DDL 不会被复制

快速检查

您需要以最短停机时间从 PostgreSQL 14 升级到 16。应使用哪种复制方式?

常见问题解答

「用于分片的逻辑复制」课时是免费的吗?

是的 — 「用于分片的逻辑复制」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「用于分片的逻辑复制」这节课中我会学到什么?

使用 PUBLICATION/SUBSCRIPTION 逻辑复制在集群之间迁移表,并支持大版本升级 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「用于分片的逻辑复制」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 流复制与 WAL
  2. 用于分片的逻辑复制
  3. 故障切换与主节点选举(Patroni、Stolon)
  4. 只读副本与连接路由
← 返回 SQL Academy