PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

django.db.utils.IntegrityError :la valeur de clé en double viole la contrainte unique spirit_category_category_pkey

Après de nombreux débogages, j'ai enfin trouvé la solution. La raison est que j'essayais d'insérer deux autres categories avec id spécifié s, ce qui empêcherait postgresql d'augmenter la last_value de la sequence relative . Juste comme suit :

0002_auto_20150728_0442.py

if not Category.objects.filter(pk=settings.ST_TOPIC_PRIVATE_CATEGORY_PK).exists():
    Category.objects.create(
        pk=settings.ST_TOPIC_PRIVATE_CATEGORY_PK,
        title="Private",
        slug="private",
        is_private=True
    )

if not Category.objects.filter(pk=settings.ST_UNCATEGORIZED_CATEGORY_PK).exists():
    Category.objects.create(
        pk=settings.ST_UNCATEGORIZED_CATEGORY_PK,
        title="Uncategorized",
        slug="uncategorized"
    )

La façon de résoudre ce problème est simple, soit changer le last_value manuellement dans django , ou simplement ne pas spécifier l'identifiant, c'est-à-dire supprimer les lignes suivantes :

....
pk=settings.ST_TOPIC_PRIVATE_CATEGORY_PK,
....
pk=settings.ST_UNCATEGORIZED_CATEGORY_PK,
....

Je suppose que si vous laissez Django entreprendre la tâche de gérer id , ce n'est peut-être pas une bonne idée de spécifier l'id vous-même lors de l'insertion de nouvelles données.