Как синхронизовать базу данных версии разработки и продакшена?
Всем привет. Проблема такая. К примеру разрабатывается приложение в гите, для бд используются миграции. Всё, проект закончен, запускается сайт, проходит время и бд на продакшене меняется. Точнее содержимое некоторых таблиц, которые отвечают за настройки, пользователей, да чего угодно, что взаимодействует с бд и тут мы решаем добавить фичи, работаем, добавляем, что-то изменяем и даже если мы ничего не добавляли и не удаляли в бд, то они уже разные. У нас может быть таблица с пользователями, в нашей версии пользователь будет 1, а на живом сайте 10 и как это всё не перетереть, что нужно делать. Как построить процесс?
База данных состоит их схемы и данных. Данные могут быть разные: управляющие, пользовательские и т.п. За схему и управляющие данные (справочники, например) отвечает миграция. С этим как я понял у вас Ok.
Зависимость кода от данных - это очевидный антипаттерн дизайна, который необходимо устранить. Тем более, если код зависит от пользовательских данных, типа ID пользователя.
С другой стороны, разработчики предпочитают работать с данными, приближенными к боевым. Однако, здесь могут быть риски, например, отправка тестового письма реальному пользователю. Процесс выглядит обычно так:
1. сливаем дамп с боевой базы данных;
2. загружаем его на тестовый сервер;
3. запускаем процедуру обфускации (удаления чувствительных пользовательских данных);
4. загружаем управляющие данные, соответствующие тестовому окружению (если это нужно).
Разрабатывать приложение надо так, чтобы оно работало на любых данных: хоть 1 пользователь, хоть 10. Не забудьте про тесты.
Миграции обычно меняют только структуру таблиц, а не сами данные.
Если же надо исправить баг, который не воспроизводится на тестовых данных, то вручную сделать дамп с боевого сайта, затереть персональные данные и развернуть локально.