类别 | 说明 |
支持版本 | 1. 源库 自建数据库 PostgreSQL 10-16 第三方云厂商(阿里云 RDS PostgreSQL/AWS RDS PostgreSQL/华为云 RDS for PostgreSQL)10-16 云数据库 PostgreSQL 10-16(相同主账号之间迁移/不同主账号之间迁移) 2. 目标库 云数据库 PostgreSQL 10-16 |
源库影响 | 1. DTS 在执行全量数据同步时,会占用一定的源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行操作。 2. 默认采用无锁方式,同步过程中对源库不加全局锁。 3. 数据同步时,DTS 会使用执行同步任务的账号在源库中建立 postgres.public.identify、{database}.__tencentdb__sync_*.* 来记录任务状态、配置信息,目标实例会使用 {database}.__tencentdb__ schema 记录同步状态信息。postgres.public.identify、{database}.__tencentdb__sync_*.*、{database}.__tencentdb__ schema 占用空间非常小,约为源库存储空间的千分之一到万分之一 ,所以对源库的性能无影响,也不会抢占资源。 4. 因同步任务依赖 max_replication_slots 参数(每个数据库配置同步任务时占用一个 replication_slots),可通过 SQL 语句 select * from pg_replication_slots查看已使用情况,如果已配置同步库数量 + replication_slots > max_replication_slots,新建同步任务会失败,需要用户主动结束任务后系统才会释放 replication_slots(失败任务未结束不会释放 replication_slots)。 |
同步对象 | 1. 不支持的对象同步:ROLE、PROCEDURE、TRIGGER、FUNCTION、RULE 等。 2. 不支持公共对象和权限变更同步。 3. 全量阶段结构初始化不支持外键导入,会自动移除外键约束后导入。 4. 数据同步不支持 FOREIGN TABLE 表类型,全量阶段导出导入不支持 TEMPORARY TABLE,增量同步阶段仅支持 UNLOGGED TABLE 数据结构同步。 5. 源库在增量阶段对 SEQUENCE 对象更新,同步到目标库后不支持对 SEQUENCE 的 last_value 的刷新,可能需要用户自行检查同步结果,并手动修改目标库上的取值。 6. 源库的对象同步目标端后,对象 owner 会改为目标库账号。例如之前表1的 owner 为 A,目标库使用 B 账号进行同步,则写入到目标库后表1的 owner 改为 B。 7. 不支持选择源端整个实例进行同步,如果在后续同步任务中,源端有新建库的操作(CREATE DATABASE),建议在同步任务启动前,自行在目标端创建好该库对象。 8. 如果在同步任务过程中,源端有 CREATE TABLE,RENAME TABLE 操作,请在配置阶段选择同步对象时,勾选该表所在的整库,否则新建的表,或者 RENAME 后的表不会同步到目标端。 9. 选择整库同步时,目标端不能存在同名的 schema 或者同名的表对象。 10. 只读实例不支持作为源端实例和目标端实例。 11. 增量同步阶段暂不支持触发器和存储过程同步。 12. 不在同步对象内的对象,不支持发起增量校验。 13. 暂不支持同步临时表。 |
数据类型 | 1. 支持的数据类型 Aclitem、Bit、Bool、Box、Bpchar、Bytea、Char、Cid、Cidr、Circle、Date、Float4、Float8、Inet、Int2、Int4、Int8、Interval、JSON、Jsonb、Jsonpath、Line、Lseg、Macaddr、Name、Numeric、Oid、Path、Point、Polygon、Record、Text、Tid、Time、Timestamp、Timestamptz、Unknown、UUID、Varbit、Varchar、XID、Daterange、Int4range、Int8range、Numrange、Tsrange、Tstzrange、Datemultirange、Int4multirange、Int8multirange、Nummultirange、 Tsmultirange、Tstzmultirange、XML、Money、Time with time zone、Tsvector、Tsquery、pg_lsn、txid_snapshot。 2. 时区 源实例带时区的字段(timestamp with time zone)同步到目标实例后,会自动转为目标实例时区的对应值。 3. 建议使用 UTF8 字符集,否则可能出现控制台界面展示问题。 |
支持的 SQL | 1. DML INSERT、UPDATE、DELETE 2. DDL DROP DATABASE、ALTER DATABASE CREATE SCHEMA、DROP SCHEMA CREATE TABLE、ALTER TABLE、DROP TABLE CREATE VIEW、DROP VIEW CREATE INDEX、DROP INDEX CREATE SEQUENCE、DROP SEQUENCE 说明: 暂不支持 CREATE TABLE 表名 AS SELECT 语句。 暂不支持 WHERE 条件过滤的 SQL 过滤策略。 |
同步功能说明 | 1. 同步任务阶段不可以删除目标端对象。 2. 增量同步过程中创建带外键约束表,写入数据时,会导致任务失败。 3. 在全量初始化场景下,如果存在部分未同步的分区表以及其索引,会导致全量导入分区表索引同步失败。建议将分区表加入到同步对象内。 4. 暂不支持仅结构同步,仅全量同步。 |
操作限制 | 1. 同步过程中请勿进行如下操作,否则会导致同步任务失败。 请勿修改、删除源数据库和目标数据库中的用户信息(包括用户名、密码和权限)和端口号。 增量同步阶段同时高并发的 DDL 和 DML 操作可能会存在数据冲突,建议减少增量阶段的 DDL。 请勿在源库上执行清除 WAL 的操作。 在同步增量阶段,请勿删除系统库和 schema postgres.public.identify、__tencentdb__sync_*.* 、{database}.__tencentdb__ schema。 源和目标数据库类型为腾讯云数据库时,请勿修改数据库实例的网络,如发生源实例和目标实例网络变更,导致原 VIP 被删除,同步任务失败、或保持运行中状态不变(此时同步已不再工作),这种情况,同步任务无法重试,需要手动结束该任务后重新建立新的同步任务。 2. 增量 DDL 不会同步在 plsql 中(匿名块、procedure 和 function )执行的 DDL。 3. 不支持表名的重命名 4. 暂不支持在匿名块中通过 execute fomat(create table) 方式创建表操作。5. 在结构初始化之后和全量导出之前,不支持 create table 操作,否则会出现“该表在目标端不存在”的报错。6. 目标库已存在同名插件且与源库插件在不同的 schema 下,同时源库对象引用插件内函数或类型的情况下,不支持对源库对象进行库表映射。 |
数据同步说明 | 1. DTS 在启动数据同步任务时,会对等待同步的表及新建的表(针对开启增量 DDL 的任务)设置 REPLICA IDENTITY FULL 属性,如果表上有长事务会导致设置超时,进而导致任务失败。 2. DTS 在启动数据同步任务时,如果数据库实例存在未提交的长事务,则会创建复制槽 slot 超时,进而导致任务失败。 |
源库 HA | 源库发生 HA 等操作导致源实例主节点发生迁移会引起 WAL 日志变化,原同步任务会失败,需要清理目标库已同步的数据,然后重新建立同步任务。 |