Ответ
Миграция базы данных — это управляемый и версионируемый процесс изменения её схемы (структуры). Вместо того чтобы вручную выполнять 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).