数据复制服务 DRS-通过创建事件触发器和函数实现PostgreSQL增量DDL同步:前提条件

时间:2024-11-26 14:45:24

前提条件

  • 当前支持的DDL操作包含如下:
    • 表级同步支持:TRUNCATE(仅PostgreSQL 11及以上版本支持)、DROP TABLE 、ALTER TABLE(包含ADD COLUMN、DROP COLUMN、ALTER COLUMN、RENAME COLUMN、ADD CONSTRAINT、DROP CONSTRAINT、RENAME)、COMMENT ON COLUMN、COMMENT ON TABLE。
    • 库级同步支持:TRUNCATE(仅PostgreSQL 11及以上版本支持)、CREATE SCHEMA/TABLE、DROP TABLE 、ALTER TABLE(包含ADD COLUMN、DROP COLUMN、ALTER COLUMN、RENAME COLUMN、ADD CONSTRAINT、DROP CONSTRAINT、RENAME)、CREATE SEQUENCE、DROP SEQUENCE、ALTER SEQUENCE、CREATE INDEX、ALTER INDEX、DROP INDEX、CREATE VIEW、ALTER VIEW、COMMENT ON COLUMN、COMMENT ON TABLE、COMMENT ON SCHEMA、COMMENT ON SEQUENCE、COMMENT ON INDEX、COMMENT ON VIEW。
    • 表级同步:RENAME表名之后,向更改名称后的表插入新的数据时,DRS不会同步新的数据到目标库。
    • 库级同步:源库使用非CREATE TABLE方式创建的表不会同步到目标库。常见地如:使用CREATE TABLE AS创建表、调用函数创建表。
    • 暂不支持以注释开头的DDL语句的同步,以注释开头的DDL语句将被忽略。
    • 不支持函数和存储过程中DDL语句的同步,函数和存储过程中执行的DDL语句将被忽略。
  • 源库和目标库版本不同时,请使用源库和目标库都兼容的SQL语句执行DDL操作。例如:源库为pg11,目标库为pg12,要将源库表的列类型从char修改为int时,请使用如下语句:
    alter table tablename alter column columnname type int USING columnname::int;
  • 执行如下操作步骤前,请检查待同步的源数据库public模式下,是否存在名为hwdrs_ddl_info的表、名为hwdrs_ddl_function()的函数、名为hwdrs_ddl_event的触发器。如存在,请将其删除。
  • 库级同步时,如创建无主键表,请执行如下命令,将无主键表复制属性设置为full。
    alter table tablename replica identity full;

support.huaweicloud.com/realtimesyn-drs/drs_03_0088.html