Yoyo migrate 与 Golang migrate 对比

发布: (2025年12月12日 GMT+8 01:47)
2 min read
原文: Dev.to

Source: Dev.to

背景

最近我需要在 CI 流水线中集成一个数据库迁移工具。起初我们选择了 golang-migrate,因为它很流行且被广泛推荐。一切看起来都很正常,直到我们开始执行真实的迁移。

golang-migrate 的问题

  • 存储过程 因分隔符处理而出现麻烦。
  • 如果迁移失败,往往会进入脏状态,我们只能手动回滚。
  • 没有内置的历史表,跟踪实际发生的事情需要额外的工作。
  • 使用默认设置时,每个迁移只能运行一条 SQL 语句,这对我们的使用场景限制太大。

转向 yoyo-migrate

在花时间尝试绕过这些问题后,我开始寻找替代方案,发现了 yoyo-migrate。它大约一年没有更新,但功能如此简单,以至于频繁发布似乎并不必要。我决定试一试,结果出乎意料地好。

我最喜欢的地方

  • 支持多条 SQL 语句。
  • 所有操作都在事务中执行,省去了手动回滚的需求。
  • 能够顺利处理存储过程。
  • 同时支持 .sql.py 迁移,方便在混合模式下的流水线中使用 schema 变更与数据转换或聚合逻辑。

结论

yoyo-migrate 没有 golang-migrate 那么流行,但在我的案例中它完成得更好。它更易使用,问题更少,并且能够契合工作流,而无需我们去做 hack 或手动修复。有时不太流行的工具恰恰更适合实际任务。

Back to Blog

相关文章

阅读更多 »

第2天:SQL

数据库结构、数据类型与表基础 1. 数据库结构回顾 关系型数据库包含: - Database - Tables - Rows - Records - Columns - Fields E...

第2天:Python 编程

数据库结构、数据类型与表基础 1. 数据库结构回顾 关系型数据库包含: - 数据库 - 表 - 行(记录) - 列(字段) E...

从未运行的 Query 的神秘案件

背景:在过去的周末,我在为我的个人网站进行代码重构时遇到了一个奇怪的 bug。我是一个休闲跑者,我有一个页面列出我所有的 r...