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 或手动修复。有时不太流行的工具恰恰更适合实际任务。