基于项目的需要,数据库需要使用OpenGauss。项目原来使用的是Mysql数据库,由于项目中有上千张表,不能一个个的手动创建,需要通过工具批量迁移。这里,我选择的工具是Navicat。
一. 工具选择及使用
在Navicat中选择工具->数据传输
填写数据库连接配置
二. 遇到的问题及解决方案
传输过程是一批一批进行的,比如10个或者20个表
1. 数据类型报错,bit, json
有一些字段是bit或者json类型,navicat在执行过程中会报错,显示不支持的类型。我使用的方法是,把bit类型先转换成int类型,json类型换成为varchar类型,等传输完再手动改回来。
2. 外键约束
由于传输过程一批一批进行,难免存在外键导致表创建失败或者无法删除的情况。这里我先批量把外键删除。通过以下sql查询出所有外键信息:
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = 'table_name';
然后再批量删除外键
3. 索引重名
在Mysql里表和表之间索引名可以一样,但在OpenGuass是不可以重复的,所以我把索引名提前改成了 表名+字段名的方法,防止索引很重名。
知道了以上几种问题的解决方法,批量表迁移还是很快的,顺利的话一天完成500+个表还是没有问题的。当然,有了以上经验,后续在创建表的时候就应该规避这些问题。