Что такое миграции и как их создать?
Выполняю тестовое задание на позицию 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.