No relations found.
三、逻辑复制发布及订阅其它相关操作
发布端:
--创建一个发布,发布两个表中所有更改。
CREATE PUBLICATION mypublication FOR TABLE users, departments;
--创建一个发布,发布所有表中的所有更改。
CREATE PUBLICATION alltables FOR ALL TABLES;
--创建一个发布,只发布一个表中的INSERT操作。
CREATE PUBLICATION insert_only FOR TABLE mydata WITH (publish = 'insert');
--修改发布的动作。
ALTER PUBLICATION insert_only SET (publish='insert,update,delete');
--向发布中添加表。
ALTER PUBLICATION insert_only ADD TABLE mydata2;
--删除发布。
DROP PUBLICATION insert_only;
--创建一个发布,发布所有的DDL操作
CREATE PUBLICATION ddl_all FOR ALL TABLES WITH (ddl='all');
--创建一个发布,发布类型为TABLE的DDL操作
CREATE PUBLICATION ddl_all FOR ALL TABLES WITH (ddl='table');
订阅端:
--创建一个到远程服务器的订阅,复制发布mypublication和insert_only中的表,并在提交时立即开始复制。
CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=15000 user=foo dbname=foodb password=xxxx' PUBLICATION mypublication, insert_only;
--创建一个到远程服务器的订阅,复制insert_only发布中的表, 并且不开始复制直到稍后启用复制。
CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.1.50 port=15000 user=foo dbname=foodb password=xxxx ' PUBLICATION insert_only WITH (enabled = false);
--修改订阅的连接信息。
ALTER SUBSCRIPTION mysub CONNECTION 'host=192.168.1.51 port=15000 user=foo dbname=foodb password=xxxx';
--激活订阅。
ALTER SUBSCRIPTION mysub SET(enabled=true);
--删除订阅。
DROP SUBSCRIPTION mysub;
四、限制
发布订阅基于逻辑复制实现,继承所有逻辑复制的限制,同时发布订阅还有下列额外的限制或者缺失的功能。
1.数据库模式和DDL命令不会被复制。初始模式可以手工使用gs_dump --schema-only进行拷贝。后续的模式改变需要手工保持同步。
2.序列数据不被复制。后台由序列支撑的serial或者标识列中的数据当然将被作为表的一部分复制,但是序列本身在订阅者上仍将显示开始值。如果订阅者被用作一个只读数据库,那么这通常不会是什么问题。不过,如果订阅者数据库预期有某种转换或者容错,那么序列需要被更新到最后的值,要么通过从发布者拷贝当前数据的防范(也许使用gs_dump),要么从表本身决定一个足够高的值。
3.只有表支持复制,包括分区表。试图复制其他类型的关系,例如视图、物化视图或外部表,将会导致错误。
4.同一数据库内的多个订阅不应当订阅内容重复的发布(指发布相同的表),否则会产生数据重复或者主键冲突。
5.如果被发布的表中包含不支持btree/hash索引的数据类型(如地理类型等),那么该表需要有主键,才能成功的复制UPDATE/DELETE操作到订阅端。否则复制会失败,同时订阅端会出现“FATAL: could not identify an equality operator for type xx”的日志。
6.当前gs_probackup工具已支持备份发布订阅的逻辑复制槽,因此可使用gs_probackup或gs_basebackup工具备份发布端。注意当恢复到非最新时间点时,由于订阅端复制源记录的remote_lsn可能大于发布端当前的wal日志插入位置,因此在这之间提交的事务无法被解码复制,在remote_lsn之后提交的事务才被解码。
7.产生列不会被复制,即如果发布端和订阅端的产生列计算定义不同,那么该列的值也会不一致
五、总结
通过以上测试,opengauss 6.0版本较5.0版本逻辑复制新增DDL同步功能,仅支持部分DDL同步,如CREATE/DROP TABLE|TABLE PARTITION、CREATE/DROP INDEX,不支持ALTER TABLE操作,如遇到此需求,需手动操作,且逻辑复制本身限制比较多,带来使用不便。opengauss在逻辑复制功能方面不断冲破限制,提高功能的完整性,希望opengauss再接再厉,再创辉煌。