PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

django.db.utils.IntegrityError:Doppelter Schlüsselwert verletzt eindeutige Einschränkung spirit_category_category_pkey

Nach langem Debuggen habe ich endlich die Lösung gefunden. Der Grund ist, dass ich versucht habe, zwei weitere categories einzufügen mit angegebener id s, was dazu führen würde, dass postgresql aufhört, den last_value zu erhöhen der relativen sequence . Einfach so:

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

Der Weg, dies zu beheben, ist einfach, entweder ändern Sie den last_value manuell in django , oder geben Sie einfach die ID nicht an, d. h. entfernen Sie die folgenden Zeilen:

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

Ich schätze, wenn Sie Django die Aufgabe überlassen, id zu verwalten , ist es möglicherweise keine gute Idee, die id anzugeben selbst beim Einfügen neuer Daten.