首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL2PG v3.3.0 发布:MySQL 5.7+/8.0 完整支持,70+ 函数转换全新升级

MySQL2PG v3.3.0 发布:MySQL 5.7+/8.0 完整支持,70+ 函数转换全新升级

作者头像
小徐
发布2026-04-29 13:57:12
发布2026-04-29 13:57:12
860
举报
文章被收录于专栏:GreenplumGreenplum

导读:经过数月的持续开发,MySQL2PG v3.3.0 正式发布!本版本新增 MySQL 5.7+/8.0 完整支持,涵盖日期时间函数、JSON 函数、存储过程语法、REGEXP_LIKE 函数等 50+ 新特性转换,修复了 CONCAT_WS 等关键函数的转换问题,并带来 CI/CD 改进、HTML 报告增强等多项优化。


🎉 版本亮点

1️⃣ MySQL 5.7+/8.0 完整支持

v3.3.0 版本实现了对 MySQL 5.7+ 和 8.0+ 版本的完整转换支持,新增 50+ 函数转换能力:

📅 日期时间函数转换

MySQL 函数

PostgreSQL 等效函数

YEARWEEK(dt)

(extract(year from dt)::int * 100 + extract(week from dt)::int)

DAYNAME(dt)

to_char(dt, 'Day')

MONTHNAME(dt)

to_char(dt, 'Month')

QUARTER(dt)

extract(quarter from dt)::int

WEEK(dt)

extract(week from dt)::int

UNIX_TIMESTAMP()

extract(epoch from now())

FROM_UNIXTIME(ts)

to_timestamp(ts)

DATE_FORMAT(dt, fmt)

to_char(dt, fmt)

STR_TO_DATE(str, fmt)

to_date(str, fmt)

DATEDIFF(d1, d2)

date_part('day', d1 - d2)

DATE_ADD(dt, INTERVAL)

dt + INTERVAL

DATE_SUB(dt, INTERVAL)

dt - INTERVAL

🔷 JSON 函数转换

MySQL 8.0 的 JSON 功能得到了全面支持:

MySQL 函数

PostgreSQL 等效函数

JSON_OBJECT('key', val)

json_build_object('key', val)

JSON_ARRAY(a, b)

json_build_array(a, b)

JSON_INSERT(doc, path, val)

jsonb_set(doc, path, to_jsonb(val), true)

JSON_REPLACE(doc, path, val)

jsonb_set(doc, path, to_jsonb(val), false)

JSON_SET(doc, path1, val1, path2, val2)

jsonb_set(jsonb_set(doc, path1, to_jsonb(val1)), path2, to_jsonb(val2))

JSON_REMOVE(doc, path)

doc - path

JSON_MERGE_PATCH(doc1, doc2)

(doc1::jsonb || doc2::jsonb)

JSON_EXTRACT(doc, path)

doc -> path

JSON_VALUE(doc, path)

doc ->> path

JSON_KEYS(doc)

json_object_keys(doc)

JSON_LENGTH(doc)

json_array_length(doc)

JSON_TYPE(doc)

jsonb_typeof(doc::jsonb)

JSON_VALID(doc)

(doc IS NOT NULL AND jsonb_typeof(doc::jsonb) IS NOT NULL)

关键修复

  • • ✅ 修复 jsonb_set 值参数类型转换问题,改用 to_jsonb(val) 避免语法错误
  • • ✅ 支持 JSON_SET 多参数语法,转换为嵌套 jsonb_set 调用
  • • ✅ 修复所有 JSON 函数转换中的 json→jsonb 类型转换
  • • ✅ 修复 JSONB_SET 路径格式为 PostgreSQL 数组格式
📝 存储过程语法转换

新增对 MySQL 存储过程流程控制语法的支持:

代码语言:javascript
复制
-- MySQL
IF condition THEN
    statement_list;
ELSEIF condition THEN
    statement_list;
ELSE
    statement_list;
END IF;

-- PostgreSQL
IF condition THEN
    statement_list;
ELSIF condition THEN
    statement_list;
ELSE
    statement_list;
END IF;
🔍 其他新增函数

MySQL 函数

PostgreSQL 等效函数

REGEXP_LIKE(str, pattern)

str ~ pattern

LOCATE(substr, str)

POSITION(substr IN str)

GROUP_CONCAT(DISTINCT expr ORDER BY expr)

string_agg(DISTINCT expr::text, ',' ORDER BY expr)

CONCAT_WS(sep, a, b, c)

ARRAY_TO_STRING(ARRAY[a, b, c], sep)

INSTR(str, substr)

POSITION(substr IN str)

CAST(expr USING charset)

expr (移除 charset 语法)


2️⃣ CONCAT_WS 函数转换修复

问题描述:CONCAT_WS 函数在转换时会丢失分隔符参数,导致转换后的 SQL 语法错误。

修复方案:将 CONCAT_WS(sep, a, b, c) 转换为 ARRAY_TO_STRING(ARRAY[a, b, c], sep),完整保留分隔符和参数顺序。

代码语言:javascript
复制
-- MySQL
SELECT CONCAT_WS(',', first_name, last_name, email) FROM users;

-- PostgreSQL
SELECT ARRAY_TO_STRING(ARRAY[first_name, last_name, email], ',') FROM users;

3️⃣ CI/CD 持续集成改进

🧪 测试执行优化
  • • ✅ 修复 go test ./... 在多包环境下的执行问题
  • • ✅ 每个包独立运行测试,避免覆盖率报告冲突
  • • ✅ 改进测试失败报告机制,清晰展示失败用例
📊 测试覆盖范围

类别

测试用例数

通过率

基础类型转换 (case_01~case_40)

40

100% ✅

索引与约束 (case_41~case_60)

20

100% ✅

MySQL 5.7+/8.0 (case_61~case_100)

40

100% ✅

业务场景 (case_101~case_120)

20

100% ✅

日常开发 (case_121~case_155)

35

100% ✅

增强场景 (case_156~case_167)

12

100% ✅

总计

167 表

100% ✅


4️⃣ HTML 迁移报告增强

📊 报告功能改进
  • • ✅ 改进 HTML 状态语义,使用更直观的徽章标识
  • • ✅ 增强日志解析准确性,支持更多日志模式
  • • ✅ 阶段汇总表格同时写入控制台和日志文件
  • • ✅ 不一致表统计信息自动关联到具体表
🎨 深色终端美学设计
  • • JetBrains Mono 等宽字体 + DM Sans 正文字体
  • • 霓虹色点缀(青色、蓝色、绿色、红色、琥珀色、紫色)
  • • CRT 扫描线纹理背景
  • • 渐变顶部栏和底部霓虹条装饰
📄 生成命令
代码语言:javascript
复制
# 基本用法
./mysql2pg report -l conversion.log

# 包含错误日志
./mysql2pg report -l conversion.log -e errors.log

# 自定义输出路径
./mysql2pg report -l conversion.log -o my-report.html

5️⃣ 其他重要修复

🐛 Bug 修复
  • • ✅ 修复函数转换中 NUMERIC 类型声明和 CLOSE 语句处理错误
  • • ✅ 修复 CAST(x USING charset) 语法转换问题
  • • ✅ 修复 JSON_SET 路径中的 $ 前缀未移除问题
  • • ✅ 修复主键列提取中的 ASC/DESC 处理问题
  • • ✅ 修复 tinyint 值超出范围导致的 CI 失败
  • • ✅ 修复 case_02_boolean 重复键错误
  • • ✅ 修复 case_04_mb3_suffix 字符集问题以支持表情符号
📚 文档更新
  • • ✅ 添加 MPP 分布式数据库支持文档
  • • ✅ 添加 HTML 报告生成使用说明
  • • ✅ 更新 README 文档,添加 MySQL 5.7+ 完整支持说明

📈 转换能力总览

版本兼容性

数据库类型

支持版本

MySQL

5.7+, 8.0+, 8.1+, 8.2+

PostgreSQL

12+, 13+, 14+, 15+, 16+, 17+, 18+

Greenplum

6.x, 7.x (MPP 模式)

YugabyteDB

2.x (MPP 模式)

转换对象支持

转换对象

支持数量

转换成功率

MySQL 数据类型

40+

99.9%

视图

42 个测试用例

100%

函数

113 个

100%

索引类型

5 种

98%

用户权限

完整支持

98%

表权限

完整支持

98%

性能指标

指标

数值

并发转换速度提升

5-10 倍

批量插入行数

50,000 行/批

数据完整性保持率

100%

平均转换速度

10,000+ 行/秒

连接测试响应时间

<1 秒


🚀 快速开始

安装

代码语言:javascript
复制
# 克隆仓库
git clone https://github.com/xfg0218/MySQL2PG.git
cd MySQL2PG

# 构建
make build

配置文件

代码语言:javascript
复制
# config.yml
mysql:
  host: localhost
  port: 3306
  username: root
  password: your_password
  database: source_db
  test_only: false

postgresql:
  host: localhost
  port: 5432
  username: postgres
  password: your_password
  database: target_db
  test_only: false

conversion:
  options:
    tableddl: true
    data: true
    view: true
    indexes: true
    functions: true
    users: true
    table_privileges: true
    validate_data: true
    truncate_before_sync: false
  limits:
    concurrency: 10
    max_rows_per_batch: 50000
    batch_insert_size: 50000

运行迁移

代码语言:javascript
复制
# 执行迁移
./mysql2pg config.yml

# 生成 HTML 报告
./mysql2pg report -l conversion.log

📊 版本统计

v3.3.0 版本包含 70+ 次提交,主要贡献者:

  • • @xfg0218 - 核心开发与维护

完整变更日志:https://github.com/xfg0218/MySQL2PG/compare/v3.2.0...v3.3.0


🔗 相关链接

  • GitHub 仓库:https://github.com/xfg0218/MySQL2PG
  • v3.3.0 Release:https://github.com/xfg0218/MySQL2PG/releases/tag/v3.3.0
  • 中文文档:README_CN.md[1]
  • 问题反馈:GitHub Issues[2]

💬 互动话题

你在使用 MySQL 到 PostgreSQL 迁移时遇到过哪些痛点?欢迎在评论区留言分享!

觉得有用的话,欢迎点赞 👍 在看 👀 分享 🔄 三连支持!


本文首发于 MySQL2PG 官方博客,转载请注明出处。

引用链接

[1] README\_CN.md: https://github.com/xfg0218/MySQL2PG/blob/main/README_CN.md [2] GitHub Issues: https://github.com/xfg0218/MySQL2PG/issues

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 河马coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🎉 版本亮点
    • 1️⃣ MySQL 5.7+/8.0 完整支持
      • 📅 日期时间函数转换
      • 🔷 JSON 函数转换
      • 📝 存储过程语法转换
      • 🔍 其他新增函数
    • 2️⃣ CONCAT_WS 函数转换修复
    • 3️⃣ CI/CD 持续集成改进
      • 🧪 测试执行优化
      • 📊 测试覆盖范围
    • 4️⃣ HTML 迁移报告增强
      • 📊 报告功能改进
      • 🎨 深色终端美学设计
      • 📄 生成命令
    • 5️⃣ 其他重要修复
      • 🐛 Bug 修复
      • 📚 文档更新
  • 📈 转换能力总览
    • 版本兼容性
    • 转换对象支持
    • 性能指标
  • 🚀 快速开始
    • 安装
    • 配置文件
    • 运行迁移
  • 📊 版本统计
  • 🔗 相关链接
  • 💬 互动话题
    • 引用链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档