PostgreSql 项目实战 2 - mysql 库数据迁移

52 阅读1分钟

1.迁移工具 pgloader

# 安装迁移工具
sudo apt-get install pgloader
# 查看安装的版本
hubiao@hubiao-ideacentre-Y700-34ISH:~$ pgloader -V
pgloader version "3.6.7~devel"
compiled with SBCL 2.2.9.debian
hubiao@hubiao-ideacentre-Y700-34ISH:~$ 

2 准备迁移脚本文件

/home/hubiao/tool/docker.load 文件

官方文档:https://pgloader.readthedocs.io/en/latest/
LOAD DATABASE
     FROM mysql://root:password@192.168.1.xx/库
     INTO postgresql://postgres:password@192.168.1.xx/库
WITH include drop, create tables, create indexes, reset sequences,
     workers = 4, concurrency = 1
CAST type datetime to timestamptz, 
     type tinyint to smallint drop typemod,
     type smallint to smallint drop typemod,
     type int to integer drop typemod,
     type bigint to bigint drop typemod
ALTER SCHEMA 'ry-vue' RENAME TO 'public';


3 docker执行脚本

hubiao@hubiao-ideacentre-Y700-34ISH:~$ docker run --rm -v /home/hubiao/tool:/tmp dimitri/pgloader:latest pgloader /tmp/docker.load

4 可能出现的问题:

4.1 mysql中存在 pgloader 转换不支持的数据类型

处理办法如下:

-- 查找到所有数据类型
SELECT DISTINCT data_type
FROM information_schema.columns 
WHERE table_schema = '库' 

-- 将无法识别的数据类型添加数据类型转换配置处理

4.2 索引数据问题

带有索引的表存在脏数据,导致数据键与索引逻辑他有问题导致失败!
索引设置错误,导致转换数据逻辑异常失败!

4.3 tinyint(1)数据类型转换

正常转换成布尔类型没有问题,如果需要转成smallint就会有问题,
因为(1)里面的长度会转换失败,脚本中需要添加"drop typemod"处理!

4.4 脚本语法问题

结尾需要添加分号结束!其他问题AI处理!