
А что не так с вашими миграциями? Liquibase, rollback и первые тревожные признаки
rurikovich 1 час назад А что не так с вашими миграциями? Liquibase, rollback и первые тревожные признаки 7 мин 1.7K Java * Базы данных * SQL * PostgreSQL * Анализ и проектирование систем * Туториал Привет, Хабр...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. rurikovich 1 час назад А что не так с вашими миграциями? Liquibase, rollback и первые тревожные признаки 7 мин 1. 7K Java * Базы данных * SQL * PostgreSQL * Анализ и проектирование систем * Туториал Привет, Хабр !
Миграции базы данных вроде бы есть, Liquibase подключен, changelog лежит в репозитории, CI зелёный, релизы проходят регулярно. Значит, процесс под контролем? Не всегда…Миграции часто выглядят как обычная техническая рутина.
Технические детали
Добавили колонку, создали индекс, поправили enum, пересобрали витрину. Но проблема может проявиться уже на релизе: база держит lock, отчёты показывают пустоту, rollback есть только на словах, а команда разбирается, изменилась схема, изменились данные или Liquibase просто выполнил то, что было описано в changelog-е. Мы рассмотрим миграции как полноценную часть разработки, а не только как придаток к коду.
Разберём, что такое миграции, какие инструменты для них используют, почему Liquibase одновременно удобный и опасный, и посмотрим на несколько проблем из реальных проектов. Что будет в статье:Что такое миграция БД и почему это не просто ALTER TABLE. Какие инструменты миграций чаще всего встречаются в разных языках.
Почему Liquibase одновременно удобный и опасный. Несколько проблем из реальных проектов: rollback, checksum, большие changeset-ы, runInTransaction=false, IF EXISTS, destructive migration и пересоздание таблиц. Миграция: простое изменение с непростыми последствиямиМиграция базы данных это версия изменения схемы или данных, которую можно повторяемо применить к окружению.
Отраслевые последствия
Сегодня на dev, завтра на stage, потом на prod. Обычно миграция делает одну из таких вещей:создаёт таблицу, колонку, индекс, constraint;меняет тип поля;преобразует данные под новую структуру;создаёт view, materialized view, enum, sequence;удаляет старую схему;иногда чинит данные, потому что реальные сценарии отличаются от проектных диаграмм. Главная идея простая: база должна эволюционировать вместе с кодом.
Если приложение версии N ожидает колонку foo, то эта колонка должна появиться до того, как код начнёт ей пользоваться. Если приложение перестало писать в старое поле, то удалять его стоит не сразу, а после понятного переходного периода. В коде мы привыкли к git history.
В базе нужен похожий механизм. Только с важным отличием: git можно откатить локально за секунду, а базу с терабайтами данных и живыми пользователями так просто не откатишь. Миграция это не просто SQL-файл.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





