Skip to content

Миграции БД (goose v3 / hgoose)

  • Инструмент: github.com/pressly/goose/v3 (в репозитории — утилита cmd/hgoose).
  • Таблица версий: migrations (настраивается ключом -table).
  • Диалект: PostgreSQL (устанавливается автоматически).

Базовые команды:

bash
# Просмотр статуса
hgoose -dir ./migrations status

# Применить все новые миграции
hgoose -dir ./migrations up

# Откатить одну миграцию
hgoose -dir ./migrations down

# Создать заготовку SQL миграции
hgoose -dir ./migrations create add_new_index sql

Через deploy.sh (рекомендуется для серверов)

Если используете deployment-бандл, миграции вызываются через deploy.sh:

bash
# Применить миграции
./deploy.sh migrate

# Статус миграций
./deploy.sh migrate-status

# Откатить одну миграцию
./deploy.sh migrate-down

deploy.sh автоматически подставляет -dir ./migrations и использует бинарник hgoose из бандла.

Docker

В Docker-среде перед запуском приложения:

bash
docker exec marv-app hgoose -dir /app/migrations up

Или через docker-compose:

bash
docker-compose exec app hgoose -dir /app/migrations up

Рекомендации

  • Держите миграции атомарными и идемпотентными (проверки IF EXISTS/IF NOT EXISTS).
  • Для индексов используйте отдельные файлы миграций.
  • Проверяйте локально up/down перед релизом.
  • Файлы миграций (migrations/*.sql) включаются в deployment-бандл автоматически.

Конфигурация подключения

hgoose получает параметры подключения к БД из конфига MARV (infrastructure.postgres.*). Режим конфига определяется переменной GIN_MODE (debug/release/test).