Django использовать старую резервную копию базы данных - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть 2 сервера: производственный (основная ветка) и тестовый (ветка dev).
На моей локальной машине я работаю в ветке dev, в ней есть все новейшие функции и новейшая схема БД.
Теперь я Необходимо проверить некоторые проблемы, которые произошли на рабочем сервере. Для этого я хочу загрузить резервную копию БД с рабочего сервера на мой локальный компьютер и выполнить некоторые манипуляции с ним.
На моем локальном компьютере запущен postgres, и именно там хранится моя локальная БД.
Что Я обычно делаю это - сбрасываю локальную БД, применяю резервную копию вместо того, что я удалил, и это прекрасно работает Я могу работать с базой данных.
Однако, если производственная база данных находится за несколькими миграциями за локальной базой данных (что часто случается), я получаю Django ошибок миграции при попытке применить все последние миграции.
Ошибки обычно такие как some_relation / some_column already exists. Вероятно, это происходит потому, что Django пытается применить все миграции, начиная с самого первого.
Чтобы обойти это, я обычно запускаю все миграции с опцией --fake, чем вносить небольшие изменения в модели (например, blank=True). Достаточно, чтобы создать новую миграцию, которую я применяю тогда. После этого я отменяю изменения и применяю еще одну миграцию. В конце концов у меня есть рабочая база данных.

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

Я не храню миграции в репо, они генерируются на каждом сервере независимо. Таким образом, простое переключение на основную ветку при работе со старой резервной копией невозможно

...