PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

django.db.utils.IntegrityError:il valore della chiave duplicata viola il vincolo univoco spirit_category_category_pkey

Dopo un sacco di debug, ho finalmente trovato la soluzione. Il motivo è che stavo cercando di inserire altre due categories con id specificato s, che farebbe smettere di postgresql di aumentare il last_value della relativa sequence . Proprio come segue:

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"
    )

Il modo per risolvere questo problema è semplice, cambia il last_value manualmente in django o semplicemente non specificare l'id, ovvero rimuovere le seguenti righe:

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

Immagino che se lasci che django si occupi del compito di gestire id , potrebbe non essere una buona idea specificare l'id te stesso quando inserisci nuovi dati.