Django migration OperationalError: индекс [имя] уже существует
Надеюсь, кто-нибудь сможет мне помочь.
У меня есть три окружения как часть моего жизненного цикла разработки django, dev, uat и live. Django 3.2.6 с python 3.9.6.
Я пытаюсь добавить пару полей в две мои модели, но получаю ошибку при попытке миграции базы данных live, миграция баз данных dev и uat прошла нормально.
Вот код миграции, сгенерированный makemigrations
# Generated by Django 3.2.6 on 2022-01-26 21:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tasks', '0015_activity_next'),
]
operations = [
migrations.AddField(
model_name='activity',
name='delegated',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='activity',
name='notified',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='adviser',
name='digest',
field=models.BooleanField(default=True, verbose_name='Send digest of assigned activities once per day?'),
),
migrations.AddField(
model_name='adviser',
name='email',
field=models.EmailField(default='i.pigney@tpio.co.uk', max_length=254),
),
]
Ничего сложного, просто добавляю два поля в модель деятельности и еще два поля в модель советника. Я не ожидал никаких проблем, но... вот трассировка ошибки:
Сообщение об ошибке понятно, но я не понимаю, почему существование индекса в базе данных должно быть проблемой. Этот же индекс уже существует в базах данных dev и uat, и это не вызвало проблем. Я рассматриваю возможность удаления индекса и проверки, поможет ли это, но я не знаю, какой ущерб это нанесет моей базе данных, и я не знаю, как ее воссоздать.
UPDATE: Я скопировал базу данных и сбросил индекс с помощью утилиты командной строки sqlite и команды sql DROP INDEX tasks_activity_provider_id_1557b363
. У меня возникла та же проблема с другим индексом. Я сбросил и его, после чего миграция сработала! Она заново создала эти индексы (в соответствии с выводом команды sqlite .indexes
). Я бы очень хотел понять, что здесь происходит, если кто-нибудь может направить меня в нужном направлении.