#database-migration #prisma
Вопрос:
Похоже, мы привели наши миграции призмы в плохое состояние. Когда мы получим последний код и запустим
prisma migrate dev
мы получаем
Миграция
20210819161149_some_migration
не смогла правильно применить к базе данных теней. Код ошибки: P3018 Ошибка: Не удалось применить миграцию. Новые миграции не могут быть применены до устранения ошибки. Подробнее о том, как решить проблемы миграции в производственной базе данных, читайте здесь: https://pris.ly/d/migrate-resolveИмя миграции: 20210819161149_some_migration
Код ошибки базы данных: 1065
Все миграции в системе управления версиями соответствуют тем, что указаны в _prisma_migrations
таблице, поэтому я не уверен, почему она считает 20210819161149_some_migration
, что это не удалось. В logs
колонке _prisma_migrations
для этой записи ничего нет. Я думаю, что произошло то, что разработчик применил миграцию, а затем изменил migration.sql
ее постфактум.
В любом случае, мы последовали описанным шагам https://pris.ly/d/migrate-resolve но они, похоже, не решают проблему. Сначала он предлагает запустить
prisma migrate resolve --rolled-back "20210819161149_some_migration"
но это приводит к
Ошибка: P3012
Миграцию
20210819161149_some_migration
нельзя откатить, поскольку она не находится в состоянии сбоя.
Поэтому мы попытались отметить это как примененное
prisma migrate resolve --applied "20210819161149_some_migration"
но это приводит к этой ошибке
Ошибка: P3008
Миграция
20210819161149_some_migration
уже зарегистрирована как примененная в базе данных.
Мы также пытались бежать
prisma migrate deploy
Что дает
13 миграций, найденных в prisma/миграции ПРЕДУПРЕЖДЕНИЕ Следующие миграции были изменены с момента их применения: 20210819161149_some_migration
но при запуске вы все равно получаете ту же проблему, что и выше prisma migrate dev
.
Есть ли какой-нибудь способ снова сделать prisma счастливой, не удаляя все данные?
Ответ №1:
Возможный обходной путь может включать создание базы данных разработки на основе вашей текущей схемы/истории миграции. Вам потребуется отдельная резервная база данных, и вы потеряете существующую историю миграции, но она должна сохранить ваши данные.
Вот как будет выглядеть этот процесс
- Удалите всю историю миграции из вашей
prisma
папки, а также_prisma_migrations
таблицу в вашей базе данных. - Создайте новую резервную базу данных.
- Подключите проект к базе данных резервной копии и запустите
prisma migrate dev --name baseline_migration
. Это приведет к созданию миграции, соответствующей вашей текущей схеме prisma. - Вернитесь к своей основной базе данных и запустите созданную миграцию
prisma migrate resolve --applied 20210426141759_baseline_migration
(номера в начале имени миграции будут отличаться).
Причина, по которой вы создадите резервную базу данных и выполните начальные базовые миграции в этой резервной базе данных, заключается в том, что вы не хотите потерять данные в своей основной базе данных. Я понимаю, что это не идеальное решение, но оно может сработать, если для вас очень важно сохранить свои данные, сохранив существующий рабочий процесс разработки.
Эту статью о добавлении Prisma Migrate в существующий проект также стоит прочитать.
Комментарии:
1. Отличный ответ. Это очень полезно.