юг: не может ALTER TABLE, поскольку он имеет ожидающие события триггера

Я хочу удалить null = True из TextField:

- footer=models.TextField(null=True, blank=True) + footer=models.TextField(blank=True, default='') 

Я создал миграцию схемы:

 manage.py schemamigration fooapp --auto 

Поскольку некоторые столбцы нижнего колонтитула содержат NULL, я получаю эту ошибку, если я запускаю миграцию:

 django.db.utils.IntegrityError: column "footer" contains null values 

Я добавил это к миграции схемы:

  for sender in orm['fooapp.EmailSender'].objects.filter(footer=None): sender.footer='' sender.save() 

Теперь я получаю:

 django.db.utils.DatabaseError: cannot ALTER TABLE "fooapp_emailsender" because it has pending trigger events 

Что не так?

  • Работа с установкойWithCopyWarning при назначении столбцов в Pandas
  • Пример использования PyLZMA
  • Получить все ключи в базе данных Redis с помощью python
  • Взаимодействие Python Redis
  • Значение внешнего ключа в Django REST Framework
  • PyQt QThread MultiThreading не работает
  • OverflowError: long int too large для преобразования в float в python
  • Асинхронный обратный DNS-поиск Python
  • 3 Solutions collect form web for “юг: не может ALTER TABLE, поскольку он имеет ожидающие события триггера”

    Каждая миграция внутри транзакции. В PostgreSQL вы не должны обновлять таблицу, а затем изменять схему таблицы в одной транзакции.

    Вам необходимо разделить миграцию данных и миграцию схемы. Сначала создайте перенос данных с помощью этого кода:

      for sender in orm['fooapp.EmailSender'].objects.filter(footer=None): sender.footer='' sender.save() 

    Затем создайте миграцию схемы:

     manage.py schemamigration fooapp --auto 

    Теперь у вас две транзакции, и миграция в два этапа должна работать.

    Другая причина этого может быть связана с тем, что вы пытаетесь установить столбец NOT NULL когда он уже имеет значения NULL .

    Просто поразили эту проблему. Вы также можете использовать db.start_transaction () и db.commit_transaction () в миграции схемы для разделения изменений данных из изменений схемы. Возможно, это не так чисто, чтобы иметь отдельную миграцию данных, но в моем случае мне понадобилась бы схема, данные, а затем еще одна миграция схемы, поэтому я решил сделать все сразу.

    Python - лучший язык программирования в мире.