Что такое миграции и как их создать?

Выполняю тестовое задание на позицию node.js junior и одно из требований создать миграции бд postgresql, но я не понимаю что это значит? Это просто sql файл в корне проекта с описанием схемы таблицы? Типа как модель? Или что это?


Ответы (1 шт):

Автор решения: Егор Банин

Миграции -- инструмент для перевода базы из одного состояния в другое. Своего рода git для бд.

Обычно когда просят написать миграцию, то имеют ввиду SQL-файл, выполнение которого переведёт схему базы в новое состояние. То есть файл с инструкциями типа create table, alter table и тд. Часто необходим и второй файл -- файл отката, который вернёт всё к исходному состоянию.

Так как последовательность применения таких файлов очень важана (например, в первой миграции создали таблицу, а во второй модифицируем её), то имена файлов содержат возрастающий идентификатор миграции. Часто этот идентификатор -- просто дата и время миграции:

migrations/
    - 20220728102400_create-foo-table_up.sql
    - 20220728102400_create-foo-table_down.sql

Инструмент миграции применяет SQL-файл и помечает (обычно в той же базе данных, в своей служебной табличке), что миграция с этим идентификатором уже применена. При повторном запуске применённые миграции будут пропущены. Соответственно применённую миграцию можно откатить, найдя down-файл с нужным идентификатором.

Некоторые инструменты предлагают свой формат файлов миграции. Например это может быть скрипт с двумя функциями up и down или один SQL-файл, но размеченный комментариями -- up и -- down. Идентификаторы тоже могут быть разные в зависимости от инструмента. Обычно инструмент имеет команду create, которая создаёт нужные файлы.

В итоге вам надо узнать используется ли уже какой-то инструмент миграций бд в проекте. Если используется, то создать файлы миграции для него. Если до вас никаких миграций на проекте не было, то вам надо затащить в проект какой-нибудь проверенный инструмент.

Как найти такой инструмент? Гуглите "%ваша платформа% db migrations", смотрите документацию, сколько звёзд на гитхабе, сравнивайте с альтернативами. Например для ноды я нагуглил db-migrate.

→ Ссылка