Goose:一款成熟灵活的数据库变更管理工具

数据库结构通常都会随着业务不断演进,例如新增字段、修改索引、重构表结构等。如果没有一个像代码一样的版本控制,很容易导致不同环境数据库结构不一致,发布程序时忘记执行某些 SQL,升级表结构之后回滚困难等问题。

Goose 是一个免费开源的数据库变更(迁移)管理工具,能够通过增量 SQL 语句或者 Go 函数将数据库变更变成可管理、可追踪、可回滚的版本。

Goose 采用 Go 语言开发,遵循 MIT 开源协议,代码托管在 GitHub:

https://github.com/pressly/goose

功能特性

  • 跨平台通用:包括 Linux、macOS、Windows 全平台。
  • 多数据库支持:Goose 目前可以支持 PostgreSQL、MySQL、SQLite、SQL Server、ClickHouse、Redshift、Spanner、TiDB、YDB、Vertica 等数据库的变更管理。
  • 两种迁移方式:支持编写简单 SQL 脚本以及复杂 Go 函数两种方式实现表结构变更。
  • 增强特性:支持回滚、部分升级、出序(Out-of-order)迁移、种子数据、环境变量替换等增强特性,覆盖更多真实发布场景。
  • 版本控制:提供时间戳或顺序编号的版本控制方式。默认使用时间戳作为迁移前缀,便于多人协作时减少冲突;官方建议在开发期用时间戳、生产发布采用顺序号的混合策略,以降低出序带来的不可控性。
  • 嵌入式迁移:可以把 SQL 脚本件打包进二进制文件进行迁移。
  • 自动迁移:可以作为 Go Provider 在程序启动时执行自动迁移。

下载安装

Goose 支持多种安装方式,使用 Go 安装的命令如下:

bash 复制代码
go install github.com/pressly/goose/v3/cmd/goose@latest

也可以通过以下网址下载二进制安装文件:

https://github.com/pressly/goose/releases

使用示例

输入 goose help 查看帮助信息:

bash 复制代码
Usage: goose DRIVER DBSTRING [OPTIONS] COMMAND

or

Set environment key
GOOSE_DRIVER=DRIVER
GOOSE_DBSTRING=DBSTRING
GOOSE_MIGRATION_DIR=MIGRATION_DIR

Usage: goose [OPTIONS] COMMAND

Drivers:
    postgres
    mysql
    sqlite3
    spanner
    mssql
    redshift
    tidb
    clickhouse
    ydb
    starrocks
    turso

...

创建一个新的 SQL 迁移脚本:

bash 复制代码
goose create add_some_column sql

2026/04/12 21:24:50 Created new file: 20260412132450_add_some_column.sql

编辑 SQL 文件,定义升级或者回滚操作。

然后,执行迁移脚本:

bash 复制代码
-- 执行所有迁移脚本
goose up

-- 迁移到指定版本
goose up-to 20260412132450

-- 迁移单个脚本
goose up-by-one

也可以执行回滚脚本:

bash 复制代码
- 回滚单个脚本
goose down

-- 回滚到指定版本
goose down-to 

-- 回滚所有脚本
goose down-to 0

其他操作,建议参考文档:

https://pressly.github.io/goose/documentation/annotations/

相关推荐
HackTwoHub15 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
l1t15 小时前
DeepSeek总结的DuckLake构建基于 SQL 原生表格式的下一代数据湖仓
数据库·sql
KmSH8umpK15 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
TDengine (老段)15 小时前
从施工监测到运营预警,桥科院用 TDengine 提升桥梁数据管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
S1998_1997111609•X16 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
KmSH8umpK17 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
BU摆烂会噶18 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain
l1t19 小时前
DeepSeek总结的DuckLake 入门
数据库
Joseph Cooper19 小时前
RAG 与 AI Agent:智能体真的需要检索增强生成吗?
数据库·人工智能·ai·agent·rag·上下文工程
light blue bird19 小时前
主子端台二分法任务汇总组件
前端·数据库·.net·桌面端winform