PostgreSQL 分区表的逻辑复制(逻辑订阅)

less than 1 minute read

背景

PostgreSQL 10 引入了内置分区语法,同时引入了逻辑订阅的功能。

《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》

逻辑订阅简单来说就是

1、创建pub,

2、将需要订阅的表加入到pub中,

3、在接收端创建订阅sub,指定订阅哪个pub。

4、然后发布的就会解析pub中包含的表的已结束事务产生的WAL,将解析后的RECORD发送给接收端。

5、接收端收到逻辑回放信息,回放。实现增量复制的目的。

那么问题来了,分区表怎么支持的呢?

目前PG的分区表,实际数据是存在分区内的,发布时,不允许对主表发布,只能发布实际包含数据的分区。

https://www.postgresql.org/docs/devel/static/sql-createpublication.html

Only persistent base tables can be part of a publication.

Temporary tables, unlogged tables, foreign tables, materialized views, regular views, and partitioned tables cannot be part of a publication.

To replicate a partitioned table, add the individual partitions to the publication.

目标端,需要定义好同样的分区(猜测应该是这样的,可以试一试验证一下)。

使用EnterpriseDB xDB的复制工具,则可以直接支持分区表的复制。

https://www.enterprisedb.com/docs/en/6.2/repguide/EDB_Postgres_Replication_Server_Users_Guide.1.55.html#

参考

https://wiki.postgresql.org/wiki/Table_partitioning

https://www.postgresql.org/docs/devel/static/sql-createpublication.html

https://www.postgresql.org/docs/10/static/ddl-partitioning.html

https://www.enterprisedb.com/docs/en/6.2/repguide/EDB_Postgres_Replication_Server_Users_Guide.1.55.html#

《PostgreSQL 逻辑订阅 - DDL 订阅 实现方法》

《PostgreSQL 10 流式物理、逻辑主从 最佳实践》

《使用PostgreSQL逻辑订阅实现multi-master》

《PostgreSQL 10.0 preview 功能增强 - 逻辑订阅端worker数控制参数》

《PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?》

《PostgreSQL 10.0 preview 变化 - 逻辑复制pg_hba.conf变化,不再使用replication条目》

《PostgreSQL 10.0 preview 功能增强 - 备库支持逻辑订阅,订阅支持主备漂移了》

《PostgreSQL 10.0 preview 功能增强 - 逻辑复制支持并行COPY初始化数据》

《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》

Flag Counter

digoal’s 大量PostgreSQL文章入口