PostgreSQL 分区表的逻辑复制(逻辑订阅)
背景
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 逻辑订阅 - 原理与最佳实践》