Repolode
pressly

pressly/goose

CLI и библиотека Go для управления изменениями схемы БД с помощью версионируемых SQL-файлов или Go-функций.

Звёзды
11,599
Форки
719
Открытые issues
145
Последний коммит
3 дня назад

Что это?

Goose — инструмент для миграций базы данных, который можно запускать как CLI-программу или подключать как библиотеку Go. Он управляет изменениями схемы в виде последовательных миграций: каждую можно применить при движении вперёд или откатить, а в базе данных отслеживаются уже применённые версии.

Миграции можно описывать в обычных SQL-файлах с директивами up и down или в виде Go-функций, зарегистрированных в вашем бинарном файле. Поддерживаются разные базы данных, включая Postgres, MySQL, MariaDB, SQLite, Spanner, ClickHouse, MSSQL и Vertica. Файлы миграций можно встроить в бинарный файл Go с помощью пакета embed. Среди других возможностей — обработка миграций не по порядку, подстановка переменных окружения в SQL-файлы и команда fix, которая преобразует миграции с временными метками в последовательную нумерацию для production.

Неиспользуемые драйверы можно исключить при сборке с помощью build tags, чтобы уменьшить размер бинарного файла.

Ключевые возможности

  • 01Выполняет SQL-миграции и миграции в виде Go-функций.
  • 02Поддерживает Postgres, MySQL, MariaDB, SQLite, Spanner, ClickHouse, MSSQL и другие базы данных.
  • 03Встраивает файлы миграций в бинарные файлы Go с помощью embed.FS.
  • 04Поддерживает миграции не по порядку и команду fix для последовательной нумерации.
  • 05Подставляет переменные окружения в SQL-миграции.

Сценарии использования

  • Версионирование схемы Go-бэкенда, работающего с Postgres или MySQL.
  • Поставка миграций базы данных внутри одного бинарного файла для развёртывания.
  • Запуск изменений схемы в CI, чтобы миграции одинаково применялись в разных окружениях.

Быстрый старт

  1. 1

    Установить goose CLI с помощью Go

    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

Что важно знать

  • Согласно README, для каждой команды CLI нужны драйвер базы данных и строка подключения, поэтому базу данных необходимо предоставить самостоятельно.
  • Для установки CLI с помощью go install требуется Go; Homebrew предлагается только пользователям macOS.

Темы

Частые вопросы

Что такое goose?
CLI и библиотека Go для управления изменениями схемы БД с помощью версионируемых SQL-файлов или Go-функций. Goose — инструмент для миграций базы данных, который можно запускать как CLI-программу или подключать как библиотеку Go. Он управляет изменениями схемы в виде последовательных миграций: каждую можно применить при движении вперёд или откатить, а в базе данных отслеживаются уже применённые версии.
goose можно использовать бесплатно? Какая у него лицензия?
goose распространяется с открытым исходным кодом под лицензией Other. Перед использованием в коммерческих продуктах проверьте условия лицензии.
goose всё ещё поддерживается?
Активно поддерживается. Последний коммит в goose — 17 окт. 2026 г..
Для чего можно использовать goose?
Версионирование схемы Go-бэкенда, работающего с Postgres или MySQL. Поставка миграций базы данных внутри одного бинарного файла для развёртывания. Запуск изменений схемы в CI, чтобы миграции одинаково применялись в разных окружениях.
Как установить goose?
Установить goose CLI с помощью Go: 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

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Полнофункциональный инструмент для изучения баз данных: проектирование, навигация, документирование и анализ схем, включая ERD-диаграммы для крупных и запутанных баз данных.

2,2 тыс.145ElmMITОбновлён 2 месяца назад