PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

django.db.utils.IntegrityError:valor de chave duplicado viola restrição exclusiva spirit_category_category_pkey


Depois de muita depuração, finalmente encontrei a solução. O motivo é que eu estava tentando inserir duas outras categories com id especificado s, o que faria com que o postgresql parasse de aumentar o last_value da sequence relativa . Apenas como 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"
    )

A maneira de corrigir isso é simples, altere o last_value manualmente em django , ou simplesmente não especifique o id, ou seja, remova as seguintes linhas:
....
pk=settings.ST_TOPIC_PRIVATE_CATEGORY_PK,
....
pk=settings.ST_UNCATEGORIZED_CATEGORY_PK,
....

Eu acho que se você deixar o django assumir a tarefa de gerenciar id , pode não ser uma boa ideia especificar o id você mesmo ao inserir novos dados.