Django-DB-Migrations: impossible de MODIFIER le TABLEAU, car il est en attente de déclencher des événements
Je veux supprimer null=True à partir d'un TextField:
- footer=models.TextField(null=True, blank=True)
+ footer=models.TextField(blank=True, default='')
J'ai créé un schéma de migration:
manage.py schemamigration fooapp --auto
Depuis quelques pied de colonnes contiennent NULL
- je obtenir ce error
si je lance la migration:
django.db.utils.IntegrityError: la colonne "pied de page" contient les valeurs null
J'ai ajouté à cela le schéma de migration:
for sender in orm['fooapp.EmailSender'].objects.filter(footer=None):
sender.footer=''
sender.save()
Maintenant, je reçois:
django.db.utils.DatabaseError: cannot ALTER TABLE "fooapp_emailsender" because it has pending trigger events
Quel est le problème?
- Cette question est similaire: stackoverflow.com/questions/28429933/... et a eu des réponses qui ont été plus utile pour moi.
Vous devez vous connecter pour publier un commentaire.
Une autre raison pour cela peut-être parce que vous tentez de définir une colonne de
NOT NULL
alors qu'elle a déjàNULL
valeurs.Chaque migration est à l'intérieur d'une transaction. Dans PostgreSQL, vous ne devez pas mettre à jour la table et ensuite modifier le schéma de la table en une seule transaction.
Vous avez besoin de partager la migration des données et le schéma de migration. D'abord créer de la migration des données avec ce code:
Puis de créer le schéma de migration:
Maintenant, vous avez deux opérations et de la migration en deux étapes devrait fonctionner.
Ont juste frappé ce problème. Vous pouvez également utiliser db.start_transaction() et db.commit_transaction() dans le schéma de migration pour séparer les modifications de données de modification du schéma. Probablement pas si propre que d'avoir une migration de données, mais dans mon cas j'aurais besoin de schéma, les données, puis un autre schéma de migration j'ai donc décidé de faire tout à la fois.