Сохранение нового объекта модели Django дает дубликат ключа - PullRequest
1 голос
/ 24 октября 2019

Django 2.2.3 на Python 3.7 с базой данных Amazon RDS Postgres.

Сохранение нового объекта не работает для этой модели компании:

class Company(models.Model):
    name = models.CharField(max_length=255, unique=True)
comp = Company(name='test')
comp.save()

Дает

UniqueViolation: duplicate key value violates unique constraint "appname_company_pkey"
DETAIL:  Key (id)=(29) already exists

Я могу подтвердить, что да, в таблице есть запись с id = 29.

Почему Джанго пытается использовать это в качестве идентификатора, и как мне его остановить?

1 Ответ

3 голосов
/ 24 октября 2019

Я разобрался.

Приложение импорта / экспорта Django не сбрасывает последовательности после импорта. Это означает, что любые добавления в любые таблицы, в которые были импортированы данные, потерпят неудачу.

Решение состоит в следующем:

python manage.py sqlsequencereset <your app name> | python manage.py dbshell

Это создает и запускает SQL следующим образом:

SELECT setval(pg_get_serial_sequence('"appname_company"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "appname_company";
...