从 MySQL 迁移到 PostgreSQL

适用场景

需要从 MySQL 迁移到 PostgreSQL,获得更丰富的 SQL 能力、扩展生态或统一数据库栈。迁移难点在数据类型、自增、大小写、存储过程和 SQL 方言。

前置条件

步骤

  1. 导出 MySQL schema 和数据:
mysqldump --single-transaction --routines --triggers \
  --set-gtid-purged=OFF app > app.sql
  1. 评估不兼容点:
grep -nE 'AUTO_INCREMENT|ENGINE=|UNSIGNED|TINYINT|DATETIME|ON UPDATE|`' app.sql | head -50
  1. 使用 pgloader 迁移:
pgloader mysql://user:***@mysql:3306/app \
  postgresql://user:***@postgres:5432/app
  1. 处理类型映射:
  1. 迁移存储过程和触发器,改写 MySQL 方言。

  2. 校验数据:

psql -c "SELECT count(*) FROM orders;"
mysql -e "SELECT count(*) FROM orders;"
  1. 切换应用连接串和驱动,观察错误率和慢查询。

验证

回滚

常见坑

相关命令