You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pgloader迁移MySQL至PostgreSQL时遇ERROR mysql:76错误如何解决

解决MySQL迁移PostgreSQL时的"ERROR mysql: 76 fell through ECASE expression"错误

这个错误是pgloader工具在处理MySQL特定对象(数据类型、存储引擎、语法)时,内置模式匹配分支缺失导致的,以下是具体解决步骤:

1. 定位触发错误的具体对象

给pgloader添加 verbose/debug 参数,输出详细运行日志,找到出错的表、字段或存储对象:

pgloader --verbose mysql://[user]:[password]@[mysql-host]/[source-db] postgresql://[user]:[password]@[pg-host]/[target-db]

从日志中重点排查是否有非标准数据类型(如ENUM/SET)、非InnoDB存储引擎的表,或特殊约束/触发器。

2. 预处理MySQL中的问题对象

  • 存储引擎转换:将所有非InnoDB表转为InnoDB(pgloader对InnoDB支持更完善):
    ALTER TABLE [problem-table] ENGINE=InnoDB;
    
  • 特殊数据类型处理:针对MySQL独有的ENUM/SET类型,可临时转为VARCHAR,或在pgloader配置中添加自定义类型映射:
    TYPE mysql:enum TO postgresql:varchar(255);
    TYPE mysql:set TO postgresql:text;
    
  • 移除不兼容对象:暂时禁用MySQL中的自定义触发器、特殊索引(如FULLTEXT),迁移完成后再重新实现为PostgreSQL兼容版本。

3. 更新pgloader至最新版本

该错误多为旧版pgloader的已知bug,更新到最新版本可修复大部分匹配分支缺失问题:

  • Debian/Ubuntu系统:
    sudo apt update && sudo apt upgrade pgloader
    
  • 其他系统可从官方源码编译或下载预编译包。

4. 使用自定义配置文件细化迁移规则

编写pgloader配置文件(如migrate.conf),明确指定迁移规则、类型映射和忽略对象,避免默认规则的局限性:

LOAD DATABASE
  FROM mysql://[user]:[password]@localhost/mysql_source
  INTO postgresql://[user]:[password]@localhost/pg_target

  WITH include drop, create tables, create indexes, reset sequences
  SET work_mem to '64MB', maintenance_work_mem to '512MB'

  TYPE mysql:longtext TO postgresql:text,
       mysql:enum TO postgresql:varchar(255),
       mysql:set TO postgresql:text

  EXCLUDE TABLES LIKE 'temp_%', 'test_%'
;

运行配置文件启动迁移:

pgloader migrate.conf

内容的提问来源于stack exchange,提问作者GanesH RahuL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:16