如果你做过后端开发、做过数据迁移、做过 CI/CD,你一定遇到过一个问题:
每次改数据库结构都像挖地雷。
字段加了,结构变了,生产库挂了;
回滚?你连版本都对不上。
今天给大家推荐一个我真正在用、稳定靠谱、用 SQL 就能搞定版本迁移的开源工具:Goose(pressly/goose)
截图引用Github项目
什么是 Goose?
Goose 是一个 数据库迁移工具,支持:
通过 SQL 文件写迁移
也能用 Go 代码写函数迁移
自动管理版本、回滚、状态检查
既能当 CLI 用,也能当库嵌入程序里用
一句话总结:
Goose 让你数据库 schema 的变更可控、可回滚、可自动化。
为什么我觉着它特别好用?
1) 你不需要学新语法,迁移就是写 SQL
不像一些工具要你写 DSL 或复杂配置,Goose 就是标准 SQL + 注释:
-- +goose UpCREATE TABLE users (...);-- +goose DownDROP TABLE users;写完就能迁移、回滚、状态查看。简单直接。
2) CLI + 库,开发/生产全覆盖
你可以:
✔ 在本地用 goose up 一键应用所有迁移
✔ 在 CI/CD 里自动运行
✔ 还可以把它嵌入服务里程序化运行迁移逻辑
也就是说:迁移既是脚本,又是代码库的一部分。
3) 支持多种数据库
无论你用的是:
- PostgreSQL
- MySQL
- SQLite
- MSSQL
- ClickHouse
- Spanner
- Vertica 等
Goose 都能跑起来。
4) 跟版本控制天然结合
Goose 的迁移文件有时间戳版本号,谁写的迁移一目了然。
CI 上跑 migrations 也能做到可追踪、可审计。
最常用的命令是啥?
这几个你每天都用得上:
goose create <name> sql — 生成新的迁移
goose up — 执行所有未执行的迁移
goose down — 回滚上一次迁移
goose status — 看迁移状态
goose fix — 把版本变成顺序号 (CI 很有用)
谁最适合用 Goose?
✔ Go 后端项目
✔ 微服务里自动化迁移
✔ 想把 Schema 变更纳入 CI/CD
✔ 想 SQL 化、简单可控的迁移方案
如果你现在还在手写 SQL、手动执行 ALTER、怕生产库崩,那 Goose 就是你要的“安全带”。
使用体验总结
Goose 把数据库 schema 变更从苦差事变成可自动、可审计、可回滚的工程化流程。
项目地址:(直接点开就用)https://github.com/pressly/goose
