一、功能介绍
openGauss提供了逻辑解码功能,通过反解xlog的方式生成逻辑日志。目标数据库解析逻辑日志以实时进行数据复制。
openGauss数据库正式推出6.0版本之后,较之前版本逻辑复制正式支持DDL操作,具体支持如下DDL操作:
CREATE/DROP/ALTER/TRUNCATE/RENAME TABLE | TABLE PARTITION | TABLE SUBPARTITION
CREATE/ALTER/DROP INDEX
CREATE/ALTER/DROP VIEW
CREATE/ALTER/DROP/REFRESH [INCREMENTAL] MATERIALIZED VIEW
CREATE/ALTER/DROP TYPE
CREATE/ALTER/DROP FUNCTION
CREATE/ALTER/DROP PROCEDURE
CREATE/ALTER/DROP TRIGGER
CREATE/DROP PACKAGE
CREATE/DROP SCHEMA
CREATE/DROP SEQUENCE
COMMENT/GRANT/REVOKE
二、环境搭建
IP | 主机名 | 版本 | 端口 | |
发布端(源端) | 192.168.57.100 | yf1 | openGauss 6.0.0 | 15400 |
订阅端(目标端) | 192.168.57.101 | yf2 | openGauss 6.0.0 | 15400 |
1.修改配置文件postgresql.conf(发布端、订阅端)
wal_level=logical
注:修改完后需重启。
2.创建逻辑复制用户(发布端)
CREATE USER repl REPLICATION SYSADMIN LOGIN ENCRYPTED PASSWORD 'repl@123';
注:用户需具有SYSADMIN、REPLICATION权限用户。
3.在pg_hba.conf配置文件中添加如下配置参数(发布端)
host replication repl 0.0.0.0/0 sha256
注:修改完后需重启。
4.创建数据库(发布端)
create database source_db;
5.执行加密操作(订阅端)
gs_guc generate -S Aa123456 -D $GAUSSHOME/bin -o subscription
6.创建数据库(订阅端)
create database target_db;
三、功能测试
1.创建测试表(发布端、订阅端)
create table logical_tb1(col1 int,col2 varchar(10),col3 timestamp);
2.创建发布(发布端)
CREATE PUBLICATION pub1 FOR ALL TABLES with(publish='insert,update,delete,truncate',ddl='all');
3.查询发布(发布端)
SELECT * FROM pg_publication;
4.创建订阅(订阅端)
CREATE SUBSCRIPTION sub1 CONNECTION 'host=192.168.57.100 port=15400 user=repl dbname=source_db password=repl@123' PUBLICATION pub1;
注:端口号不能使用主端口,应该使用主端口+1端口,否则会与线程池冲突。
5.查询订阅(订阅端)
SELECT * FROM pg_subscription;
6.刷新订阅(订阅端)
ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION;
7.插入数据(发布端)
INSERT INTO logical_tb1 values(1,'yyf','2024-11-12'),(2,'jjj','2024-11-12'),(3,'yyz','2024-11-12');
8.执行ALTER TABLE删除列操作(发布端)
ALTER TABLE logical_tb1 drop COLUMN col3;
9.执行ALTER TABLE修改列名操作(发布端)
ALTER TABLE logical_tb1 rename COLUMN col2 to col4;
10.执行ALTER TABLE新增列操作(发布端)
ALTER TABLE logical_tb1 add COLUMN col5 varchar(10);
11.查询复制结果(订阅端)
select * from logical_tb1;
四、限制
只支持行存表的DDL操作。
不支持列存,Ustore存储引擎。
TYPE仅支持复合类型和枚举类型。
在订阅端手动删除表会导致DDL同步失败,发布订阅阻塞。
不支持在对表进行相关的表结构操作中调用VOLATILE函数。
在逻辑复制中使用ALTER TABLE时会有如下限制:
当ALTER TABLE修改表字段类型,使用USING子句设置字段值时,要求表上必须有replication identity字段,并且USING子句修改的表字段不为该标识符字段。
当ALTER TABLE修改或新增表字段为AUTO_INCREMENT自增列时,要求表上必须有replication identity字段,并且USING子句修改的表字段不为该标识符字段。
当ALTER TABLE新增表字段,并且表字段类型不为内置类型,即需要每个元组都重新计算其默认值,要求表上必须设置replication identity。
五、总结
通过以上测试,openGauss6.0版本在原有版本基础上逻辑复制功能新增支持DDL功能,突破DDL同步限制,使得openGauss逻辑复制功能更丰富、强大,在实际应用中发挥巨大作用。