Что такое миграции базы данных и зачем они нужны?

Ответ

Миграция базы данных — это управляемый и версионируемый процесс изменения её схемы (структуры). Вместо того чтобы вручную выполнять SQL-запросы на разных окружениях, разработчики пишут скрипты миграций, которые применяются автоматически.

Как это работает?
Каждая миграция представляет собой пару скриптов:

  • Up-миграция: Применяет изменения (например, CREATE TABLE, ADD COLUMN).
  • Down-миграция: Откатывает изменения (например, DROP TABLE, DROP COLUMN).

Специальная утилита отслеживает в БД, какие миграции уже были применены, и накатывает только новые.

Пример миграции с golang-migrate/migrate:

Файл 000001_create_users_table.up.sql

CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Файл 000001_create_users_table.down.sql

DROP TABLE IF EXISTS users;

Ключевые цели и преимущества:

  • Версионирование схемы БД: Схема базы данных хранится в коде и является частью системы контроля версий (Git), как и код приложения.
  • Автоматизация развертывания: Миграции легко встраиваются в CI/CD пайплайны, что гарантирует одинаковую структуру БД на всех окружениях (dev, staging, prod).
  • Согласованность в команде: Все разработчики работают с актуальной и одинаковой схемой БД.
  • Безопасность и надежность: Возможность отката изменений (down-миграция) позволяет быстро исправить ошибку в случае неудачного развертывания.

В Go популярны инструменты для управления миграциями, такие как golang-migrate/migrate, goose и gorm (для ORM).