Repolode
pressly

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. 1

    使用 Go 安装 goose 命令行工具

    go install github.com/pressly/goose/v3/cmd/goose@latest
  2. 2

    对 SQLite 数据库检查迁移状态

    goose sqlite3 ./foo.db status
  3. 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 数据每日更新。

相关项目