> Как реализовать миграции базы данных (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Лукойл
Стек: Go
> Пример ответа
Миграции базы данных в Go чаще всего реализуются с помощью специализированных библиотек, таких как golang-migrate/migrate или pressly/goose. Основная идея - хранить изменения схемы (SQL-скрипты) в версионированных файлах и применять их последовательно.
Пример реализации с golang-migrate/migrate:
- Установка библиотеки:
go get -u github.com/golang-migrate/migrate/v4 - Создание папки
migrationsс файлами вида000001_create_users_table.up.sqlи000001_create_users_table.down.sql(для отката). - Написание SQL-скрипта (например,
up.sql):
SQLCREATE TABLE users (id SERIAL PRIMARY KEY,name VARCHAR(255) NOT NULL,email VARCHAR(255) UNIQUE NOT NULL);
- Применение миграций в коде:
GOimport ("github.com/golang-migrate/migrate/v4"_ "github.com/golang-migrate/migrate/v4/database/postgres"_ "github.com/golang-migrate/migrate/v4/source/file")func RunMigrations(databaseURL string) error {m, err := migrate.New("file://migrations", databaseURL)if err != nil {return err}if err := m.Up(); err != nil && err != migrate.ErrNoChange {return err}return nil}
- Для отката используется
m.Down().
Альтернативно, goose предлагает более гибкий подход с поддержкой Go-функций в миграциях. В production-среде миграции обычно запускаются при старте приложения или отдельным CLI-командой. Важно всегда иметь down-миграции для безопасного отката и тестировать изменения на копии базы данных перед применением.
> Похожие задачи по backend
Какие стратегии пагинации можно использовать вместо LIMIT OFFSET?
Что такое функция
Что такое WebSocket и как он работает
Приведите пример инкапсуляции
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью