Email or username:

Password:

Forgot your password?
Данила Горелко

Товарищи программисты. А что вы используете для отслеживания sql миграций? Чтобы аппенд онли, само номера проставляло, ругалось если какую-то миграцию изменили. И как вы решаете проблему миграций из разных веток (как их так мёрджить, чтобы они не только могли все примениться, но и последовательность сохранялась)?

А то мы пока что руками это всё делаем. Это долго. За всеми программистами не уследить и вот это всё.

15 comments
Григорий Клюшников

Я тоже руками делаю))
Но мне ок, я же над проектом работаю в одиночестве

TSource Engine Query
@danilax86 храни где-нибудь в той же базе текущую версию схемы.

Если та что в базе меньше требуемой -- автоматом накинуть новых миграций. Если больше выдать ошибку. И наоборот можно откатывать миграции если нормально писать откатывающую команду.

За номер версии можно брать дату создания самой миграции.
@danilax86 храни где-нибудь в той же базе текущую версию схемы.

Если та что в базе меньше требуемой -- автоматом накинуть новых миграций. Если больше выдать ошибку. И наоборот можно откатывать миграции если нормально писать откатывающую команду.
TSource Engine Query
@danilax86 с мержем конечно так не получится, но имхо его лучше и не мержить.

Разработчик на тестовой базе может просто сделать копию. Пользователям это не нужно
Данила Горелко

27329ed9-2211-a1ba-9371-e2641bf0dcb6, это всё есть.

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

TSource Engine Query
@danilax86 тогда хранить таблицу миграций.

Последовательность обычно не так страшна.
iliazeus

@danilax86 хм, технически, можно подтягивать информацию о последовательности из git-метаданных. Сохранять ее в файл пре-коммит-хуком, например.

Не уверен, правда, делает ли так кто-то, и есть ли подводные камни.

@a1ba

κρ🦥μγ

@danilax86 ничего, кажется, это нерешаемая задача для автоматики.

iliazeus

@danilax86

> И как вы решаете проблему миграций из разных веток (как их так мёрджить, чтобы они не только могли все примениться, но и последовательность сохранялась)?

Подозреваю, что для хоть сколько-то сложных случаев это все равно нужно будет делать руками - как и с кодом

WildTuna 🇷🇺

@danilax86 список применённых миграций в самой бд. Номера миграций timestamp. Решаем проблему отставания просто: Миграции строго не ломающие и отдельным мр. Выкатываются заранее до релиза фичи. Если долгая с блокировками, то в тех окна.

Данила Горелко

WildTuna,

Решаем проблему отставания просто: Миграции строго не ломающие и отдельным мр. Выкатываются заранее до релиза фичи

То самое решение, о котором я почему-то не смог додуматься. Спасибо!

ХаББыватель

Миграции в рамках одного проекта прекрасно управляются фреймворком, на котором этот проект реализован.

Менять миграцию, когда поверх неё уже накидали новых - это что-то из области максимально вредных советов. Так делать не надо. Надо создавать новую, исправляющую всё как надо.

И чем помешали даты в названии миграции?

Данила Горелко

ХаББыватель,

Менять миграцию, когда поверх неё уже накидали новых - это что-то из области максимально вредных советов. Так делать не надо. Надо создавать новую, исправляющую всё как надо.

Но я то же самое и написал:

ругалось если какую-то миграцию изменили

.

И чем помешали даты в названии миграции?

Честно, я не знаю. Эту дату ещё нужно прочитать, она ещё обязательно будет в каком-нибудь неудобном формате. Порядковый номер и очень краткое описание в названии намного лучше понимается человеком

ХаББыватель

У нас если кто-то изменил миграцию ругаюсь я 😁. Но такое возможно только 1 раз на сотрудника. Потом они понимают что так делать нельзя.

Не знаю зачем может понадобиться смотреть миграции подряд, я их смотрю только во время мерж-реквеста, а там их обычно пара штук.

А. Дюдꙮв

@danilax86@friends.grishka.me у меня на работе liquibase. Мердж миграций работает почти автоматически при мердже веток, потому что он не генерирует последовательные ID, а с какой-то случайной дельтой. Из-за этого при мердже достаточно просто в index.xml убедиться, что заимпортированы и те, и другие миграции. Минусы: странности XML + странности SQL иногда рождают абсолютно непонятные ошибки парсинга, но это решается гуглежом

Go Up