将PostgreSQL迁移到TeleDB 本页介绍天翼云TeleDB数据库将PostgreSQL迁移至TeleDB。 支持的源和目标数据库 支持的源和目标数据库如下表: 源数据库 目标数据库 PostgresSQL 12, 13, 14, 15 TeleDB 支持的迁移对象及SQL 迁移对象 结构迁移支持的对象:模式、表、索引、约束(外键、唯一、排他)、视图、物化视图、序列、存储过程、函数、规则、触发器、用户自定义类型、域。 支持的字段类型:数字类型、货币类型、字符类型、二进制数据类型、日期/时间类型、布尔类型、枚举类型、几何类型、网络地址类型、位串类型、文本搜索类型、UUID类型、JSON类型、复合类型、范围类型。 注意事项 每次至多同步一个库(database),同步多个库需要创建多个DTS任务。 模式:不支持pgtoast,pgtemp1,pgtoasttemp1,pgcatalog,informationschema等系统模式的迁移。 表:不支持临时表的迁移,表的索引、约束会一起迁移,表的触发器、规则在全量完成之后迁移。 序列:待迁移的表中有引用序列时,必须同时迁移相应的序列。 映射规则: 不包含增量时,可以对库、表、列名进行映射,若对表的列进行映射,则表中涉及到该列的约束将不会迁移。 包含增量时,不支持列名映射。 视图、存储过程、函数、域、自定义类型等对象依赖的表不支持做表名映射,否则视图、存储过程、函数将会失效。 增量数据迁移支持的SQL操作 DML INSERT、UPDATE、DELETE。 DDL 增量迁移的DDL操作仅支持CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE SEQUENCE、ALTER SEQUENCE、DROP SEQUENCE、CREATE VIEW、ALTER VIEW、DROP VIEW、CREATE INDEX、ALTER INDEX、DROP INDEX。 注意 暂不支持 CREATE TABLE 表名 AS SELECT 语句。 RENAME表名之后,向更改名称后的表插入新的数据时,DTS不会同步新的数据到目标库,因可能会导致任务中断异常或数据不一致。 暂不支持以注释开头的DDL语句的同步。 数据库账号及权限 数据库 所需权限 参考赋权语句 源库 数据库的CONNECT权限, 模式的USAGE权限, 表的SELECT权限, 序列的SELECT权限存在增量 REPLICATION连接权限 对模式public的USAGE和CREATE权限 用于 增量抓取ddl ,这里也可以用户提前创建好 CREATE USER和GRANT语法。 创建同步用户 (dts)CREATE USER dts WITH PASSWORD 'xxx'; 授权同步用户 (dts) 需要同步的 SCHEMA (public) 权限 GRANT SELECT,REFERENCES,TRIGGER ON ALL TABLES IN SCHEMA public TO dts; grant SELECT on ALL SEQUENCES IN SCHEMA public to dts; grant usage on schema public to dts; 开启同步用户 (dts) 的 REPLICATIONALTER USER dts REPLICATION; grant pgreadallsettings to dts; 目标库 存在结构 具有模式所在库的CONNECT权限、 模式所在库上的CREATE权限、 对象所在模式的USAGE权限、 对象所在模式上的CREATE权限 不存在结构 迁移库表的INSERT, UPDATE, DELETE, DDL 权限 创建同步用户 (dts)CREATE USER dts WITH PASSWORD 'xxx'; grant usage on schema public to dts; grant ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dts; grant CREATE on DATABASE public to dts; grant CREATE on schema public to dts 操作须知 DTS迁移过程一般包含四个阶段:预检查阶段、结构迁移阶段、全量阶段、增量阶段。为了确保数据迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。 任务开始前 源库要求 源数据库的分区表触发器不可以设置为disable。 全量同步支持源库备机状态,但需要设置hotstandbyfeedback为on;增量同步不支持源库备机状态。 同步对象依赖和关联的对象也须一起同步,否则可能导致任务失败。 若要做增量同步,源数据库的“pghba.conf” 文件中包含如下的配置: host replication all 0.0.0.0/0 md5 源数据库参数wallevel必须配置为logical; 源数据库需提前安装Decoderbufs插件; 源数据库中无主键表的replica identity属性必须为full; 源数据库的maxreplicationslots参数值必须大于当前已使用的复制槽数量; 源数据库的maxwalsenders参数值必须等于或大于maxreplicationslots参数值; 源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。 同步对象依赖和关联的对象也须一起同步,否则可能导致任务失败。 目标库要求 目标数据库的blocksize参数值必须大于或等于源库中的对应参数值。 如果存在money类型的字段,需要目标数据库和源数据库的lcmonetary参数值一致。 若要做增量同步,且同步对象包含外键、触发器或事件触发器,则目标数据库的sessionreplicationrole参数必须设置为replica,同步结束后,此参数需改为origin。 目标库不可以包含与待同步对象类型相同且名称相同的对象,包括模式、表、序列等,否则任务可能出差。系统库、系统模式、系统表等除外。 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。 对于全量+增量和增量任务,启动前请确保源库中未启动长事务,启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。 若选择同步DDL,须注意源库执行DDL时,确保在目标库上是兼容的。 目标数据库关联TeleDB实例必须有足够的磁盘空间,磁盘大小建议取以下两种中的最小值: 源库待迁移数据量大小的1.5倍。 源库待迁移数据量大小加200GB。 结构、全量过程中 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 增量过程中 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。 请勿在目标库做写入操作,否则可能导致数据不一致。 库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。 若选择同步DDL,须注意源库执行DDL时,确保在目标库上是兼容的。 数据稽核 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DTS任务的冲击。 在增量同步过程中做对比时,源库若存在写入,则对比结果可能不一致。 数据类型映射说明 PostgreSQL类型 Decoderbuf字段 BOOLOID datumboolean INT2OID datumint32 INT4OID datumint32 INT8OID datumint64 OIDOID datumint64 FLOAT4OID datumfloat FLOAT8OID datumdouble NUMERICOID datumdouble CHAROID datumstring VARCHAROID datumstring BPCHAROID datumstring TEXTOID datumstring JSONOID datumstring XMLOID datumstring UUIDOID datumstring TIMESTAMPOID datumstring TIMESTAMPTZOID datumstring BYTEAOID datumbytes POINTOID datumpoint PostGIS geometry datumpoint PostGIS geography datumpoint 准备工作 1. 登录自建PostgreSQL所属的服务器。 2. 如果需要进行增量迁移,需要将配置文件中的wallevel设置为logical。 3. 将DTS的IP地址加入至自建PostgreSQL的配置文件pghba.conf中。如下图: 如果您已将信任地址配置为0.0.0.0/0,可跳过本步骤。 4. 如果任务包含增量迁移,需安装PostgreSQL的逻辑解码器输出插件Decoderbufs,建议安装v2.1.1.Final以上版本,低版本可能会导致PostgreSQL数据库出现coredump,详细的步骤可参考如下内容或PostgreSQL官网文档。 > (1) 请自行前往github仓库获取Decoderbufs插件。 > (2) 进行插件的配置。 > ① 进行插件的编译。 > > export PATH/usr/lib/postgresql/9.6/bin:$PATH > make > make install > ② 在postgresql.conf中配置逻辑复制。 > > MODULES > sharedpreloadlibraries 'decoderbufs'