本文档用于描述 DBMS 分布式迁移服务平台 POSTGRES 迁移功能
结构迁移任务配置示例
Postgres MIGRATE MYSQL 兼容性数据库内置列数据类型映射规则 ,提供以下功能实现:
- SCHEMA 名称区分大小写
- TABLE 名称区分大小写
- COLUMN 名称区分大小写
- 表结构定义迁移
- 表索引定义迁移
- 表约束定义迁移
- 自定义配置路由规则映射
- schema 名称路由
- 数据库表名路由
- 数据库表列名称路由
- 自定义配置迁移规则映射,迁移规则优先级:列->表->SCHEMA->任务->内置
- 列数据类型自定义
- 列默认值自定义
- 表属性自定义(仅限 TiDB 数据库)
- 列默认值无内置规则,并提供 [buildin_datatype_rule] 和 [buildin_defaultval_rule] 元数据表,能够编写更多规则
- 断点续传
- 数据库序列 SEQUENCE 迁移(需要下游数据库支持序列)
- 经转换的表结构可直接下游数据库进行创建(需要下游数据库支持序列)
NOTE:
约束类别 | 注意事项 | 备注 |
---|---|---|
数据库版本 | POSTGRES 数据库版本要求 >= 9.5 | |
字符集 | POSTGRES 数据库字符集 ONLY 支持 EUC_TW、UTF8、EUC_CN | |
排序规则 | POSTGRES 数据库排序规则 ONLY 支持 C、POSIX、ZH_TW、ZH_TW.UTF8、ZH_TW.UTF-8、ZH_CN、ZH_CN.UTF8、ZH_CN.UTF-8、EN_US、EN_US.UTF8、EN_US.UTF-8,如果下游数据库是 MYSQL / TiDB,则忽略 POSTGRES 数据库字符集,统一 UTF8MB4 和 UTF8MB4_BIN、UTF8MB4_0900_AI_CI 转换 | |
数据表类型 | 1. 分区表、临时表、聚簇表、外部表以及自定义类型 UDT 表统一转换成普通表,且自定义 UDT 表结构迁移受限自定义类型,下游数据库若不支持直接创建则以报错形式记录 2. 物化视图、普通视图统一忽略转换,以不兼容形式记录 |
如有必要,请获取完整的不兼容对象信息清单,然后进行手动转换 |
数据表约束 | MYSQL 兼容性数据库唯一约束基于唯一索引字段,下游只会创建唯一索引 | |
表索引类型 | POSTGRES 数据库不兼容索引类型以不兼容形式记录 | |
数据表默认值 | 数据库表列函数默认值不转换,保留上游默认值,下游建表时是否报错取决于下游数据库是否支持当前函数默认值 | |
错误处理 | 如果程序遇到报错,进程不会终止,具体错误表以及对应的错误详情参见元数据表 [struct_migrate_task] 数据 |
结构对比任务配置示例
POSTGRES MIGRATE MYSQL 兼容性数据库,以上游数据库 POSTGRES 表结构为基准,提供以下功能实现:
- SCHEMA 名称区分大小写
- TABLE 名称区分大小写
- COLUMN 名称区分大小写
- 自定义配置路由规则映射
- SCHEMA 名称路由
- TABLE 名称路由
- COLUMN 名称路由
- 自定义配置迁移规则映射,迁移规则优先级:列->表->SCHEMA->任务->内置
- 列数据类型自定义
- 列默认自定义
- 表索引对比,依据索引类型既对比索引是否一致,也对比索引字段是否一致
- 表约束对比,依据约束类型既对比约束名是否一致,也对比约束字段是否一致
NOTE:
约束类别 | 注意事项 | 备注 |
---|---|---|
基准参照 | 数据库表数据类型自定义部分参照自定义基准进行对比,非自定义部分参照内置转换规则基准进行对比 | |
字符集和排序规则 | 如果下游数据库是 TiDB / MYSQL,则忽略 POSTGRES 数据库字符集,统一 UTF8MB4 转换对比,而排序规则根据内置规则映射转换对比 UTF8MB4_BIN、UTF8MB4_0900_AI_CI 对比 | |
外键和检查约束 | 1. 如果下游数据库是 TiDB,则排除外键、检查约束对比 2. 如果下游数据库是 MYSQL,对于低版本只检查外键约束,高版本外键、检查约束都对比 |
|
错误处理 | 如果程序遇到报错,进程不会终止,具体错误表以及对应的错误详情参见元数据表 [struct_compare_task] 数据 |
STMT 数据迁移任务配置示例
CSV 数据迁移任务配置示例
POSTGRES MIGRATE MYSQL 兼容性数据库,提供以下功能实现:
- SCHEMA 名称区分大小写
- TABLE 名称区分大小写
- COLUMN 名称区分大小写
- 自定义配置路由规则映射
- SCHEMA 名称路由
- TABLE 名称路由
- COLUMN 名称路由
- 自定义数据库表迁移范围
- 自定义配置 SQL Hint
- 断点续传
- 上游数据库一致性/非一致性读
- 表数据字符集参照上下游数据源参数配置 charset 进行自动转换传输,支持乱码 garbled-char-replace 字符替换功能
- 支持统计信息以及 CHUNK 形式划分数据迁移范围,并自动识别 ORACLE 数据库版本并采用最优的方式迁移
- 数据存放空间检查是否满足数据表大小,不满足自动跳过,直至找到满足条件的数据表导出或者任务结束 (ONLY CSV MIGRATE TASK)
- 下游 TiDB 数据库 CSV 数据迁移支持自动导入(Require: TiDB Version >= v7.5)
NOTE:
约束类别 | 注意事项 | 备注 |
---|---|---|
数据表结构 | 数据表存在主键或者唯一键,否则因异常错误退出或者手工中断退出,断点续传【replace into】无法替换,数据可能会导致重复,除非手工清理下游重新导入 | |
断点续传 | 断点续传期间,参数配置文件 chunk-size 不能动态变更,但可通过配置 enable-checkpoint = false 自动清理断点以及已迁移的表数据,重新导出导入 | |
错误处理 | 如果程序遇到报错,进程不会终止,CSV / STMT 模式数据迁移具体错误表以及对应的错误详情参见元数据表 [data_migrate_task] 数据 |
数据校验任务配置示例
POSTGRES MIGRATE MYSQL 兼容性数据库,以上游 POSTGRES 数据库为基准,提供以下功能实现:
- SCHEMA 名称区分大小写
- TABLE 名称区分大小写
- COLUMN 名称区分大小写
- 自定义配置路由规则映射
- SCHEMA 名称路由
- TABLE 名称路由
- COLUMN 名称路由
- 自定义数据库表数据校验范围、校验字段以及可忽略的校验字段
- 上游一致性/非一致性读,下游当前读
- 支持程序 CRC32、数据库 MD5 方式数据校验以及只校验数据表行数
- 断点续传
- 非强制要求表结构必须存在有效唯一字段索引,采用数据对比过程结合数据记录行数规避
NOTE:
约束类别 | 注意事项 | 备注 |
---|---|---|
数据校验 | ONLY 校验数据行数产生的差异不会输出详情修复文件,元数据表只记录数据表不相等,但对应的上下游表行数程序日志会显示记录 | |
校验规则 | 1. compare-field/compare-range 参数,compare-range 优先级高于 compare-field,仅当两个都配置时,以 compare-range 为准 2. compare-field 参数字段是否是索引字段,需自行确认保证,非索引字段影响校验效率以及数据库资源消耗 |
|
断点续传 | 断点续传期间,参数配置文件 chunk-size 不能动态变更,但可通过配置 enable-checkpoint = false 自动清理断点以及已迁移的表数据,重新导出导入 | |
错误处理 | 如果程序遇到报错,进程不会终止,具体错误表以及对应的错误详情参见元数据表 [data_compare_task] 数据 |
POSTGRES MIGRATE MYSQL 兼容性数据库,计划ing
NOTE:
- 全量数据迁移参见 数据迁移