一个轻量、与框架无关的命令行工具,用纯 SQL 管理数据库迁移,适用于多人协作和多环境部署。
pressly/goose
一个用于数据库结构迁移的 CLI 与 Go 库,支持 SQL 文件和 Go 函数两种迁移方式。
- Star
- 11,599
- Fork
- 719
- 未关闭 Issue
- 145
- 最近提交
- 3天前
这是什么?
Goose 是一个数据库迁移工具,既可以作为命令行程序使用,也可以作为 Go 库引入项目。它把数据库结构变更拆分为可增量应用的迁移脚本,每个迁移都可以向上执行或向下回滚,并在数据库中记录已应用的版本。
迁移既可以写成带有 up 和 down 注释标记的纯 SQL 文件,也可以写成注册在自定义二进制程序中的 Go 函数。支持 Postgres、MySQL、MariaDB、SQLite、Spanner、ClickHouse、MSSQL、Vertica 等多种数据库,迁移文件还可以通过 embed 打包进 Go 二进制。此外支持乱序迁移、SQL 中的环境变量替换,以及将带时间戳的迁移转换为顺序编号的 fix 命令。
构建时可以通过 build tags 排除不需要的数据库驱动,以减小二进制体积。
核心功能
- 01同时支持 SQL 迁移与 Go 函数迁移。
- 02支持 Postgres、MySQL、MariaDB、SQLite、Spanner、ClickHouse、MSSQL 等数据库。
- 03可通过 embed.FS 将迁移文件打包进 Go 二进制。
- 04支持乱序迁移,并提供 fix 命令转换为顺序编号。
- 05可在 SQL 迁移中进行环境变量替换。
适用场景
- 为基于 Postgres 或 MySQL 的 Go 后端项目管理表结构版本。
- 将数据库迁移随应用一起打包进单个可部署的二进制文件。
- 在 CI 中执行结构变更,保证各环境迁移一致。
快速上手
- 1
使用 Go 安装 goose 命令行工具
go install github.com/pressly/goose/v3/cmd/goose@latest - 2
对 SQLite 数据库检查迁移状态
goose sqlite3 ./foo.db status - 3
应用所有可用的迁移
goose sqlite3 ./foo.db up
使用前须知
- 命令行工具通过 go install 安装,需要本机已安装 Go;Homebrew 安装方式仅面向 macOS 用户。
- 每条命令都需要提供数据库驱动和连接字符串,因此必须自行准备数据库。
标签
常见问题
- goose 是什么?
- 一个用于数据库结构迁移的 CLI 与 Go 库,支持 SQL 文件和 Go 函数两种迁移方式。 Goose 是一个数据库迁移工具,既可以作为命令行程序使用,也可以作为 Go 库引入项目。它把数据库结构变更拆分为可增量应用的迁移脚本,每个迁移都可以向上执行或向下回滚,并在数据库中记录已应用的版本。
- goose 可以免费使用吗?用的什么许可证?
- goose 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
- goose 还在维护吗?
- 活跃维护中。goose 最近一次提交是在 2026年10月17日。
- goose 适合用来做什么?
- 为基于 Postgres 或 MySQL 的 Go 后端项目管理表结构版本。 将数据库迁移随应用一起打包进单个可部署的二进制文件。 在 CI 中执行结构变更,保证各环境迁移一致。
- goose 怎么安装和运行?
- 使用 Go 安装 goose 命令行工具: go install github.com/pressly/goose/v3/cmd/goose@latest 对 SQLite 数据库检查迁移状态: goose sqlite3 ./foo.db status 应用所有可用的迁移: goose sqlite3 ./foo.db up
- 在哪里获取 goose?
- 源代码和安装说明在 GitHub 上:https://github.com/pressly/goose
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
轻量级、无头的 TypeScript ORM,支持 PostgreSQL、MySQL 和 SQLite,可运行于 Node.js、Bun、Deno 及边缘运行时。
跨平台 SQL 编辑器与数据库管理工具,支持 Linux、macOS 和 Windows,可连接 MySQL、PostgreSQL、SQLite 等多种数据库。
面向大型复杂数据库的全栈探索工具,支持 ERD 图、数据浏览、文档和结构分析。
支持多种数据库的 AI 数据库客户端,同时提供 MCP 服务器供智能体查询。
免费的跨平台桌面 SQL 客户端与数据库工具,支持 100 多种数据库。