10

I have a PostgreSQL database that where I performed python manage.py dumpdata to backup the data into a json file. I created a new PostgreSQL database, performed a migrate, and everything worked like clockwork. When I tried to load the backup.json file with python manage.py loaddata backup.json it, gives me this error.

Could not load contenttypes.ContentType(pk=15): duplicate key value violates unique constraint "django_content_type_app_label_76bd3d3b_uniq"
DETAIL:  Key (app_label, model)=(navigation, navigation) already exists.

I checked phpPgAdmin, and there is a row for News. Is there a way to load the backup json file without including the content types, or better yet dump everything except for content types data ?

Vao Tsun
  • 47,234
  • 13
  • 100
  • 132
TJB
  • 3,706
  • 9
  • 51
  • 102
  • 1
    if you just exclude ContentTypes - you might hit another duplicate and another, and another. It needs wider approach change I think – Vao Tsun Sep 26 '17 at 08:03
  • There are some differences between a postgres native `pg_restore` and django `loaddata`. This article clearly explains these differences and possible solutions - http://deephacks.com/articles/entry/django-backups-dumpdata-versus-sql-dump-postgresql-and-mysql/ But as @Vao Tsun advices, it would be better to find these constraint issues deep into your data. – Mahesh H Viraktamath Sep 26 '17 at 11:14

2 Answers2

24

I was getting similar error:

django.db.utils.IntegrityError: Problem installing fixture '/home/knysys/ogmius/ogmius/db.json': Could not load contenttypes.ContentType(pk=2): duplicate key value violates unique constraint "django_content_type_app_label_model_76bd3d3b_uniq" DETAIL: Key (app_label, model)=(auth, user) already exists

After that, I found out that If you are restoring a fresh database from another database, You need to dumpdata like this:

./manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

and then load fresh database like this:

./manage.py loaddata db.json
ARKhan
  • 1,724
  • 22
  • 30
4

You can use the following command to load data:

python manage.py loaddata --exclude auth.permission --exclude contenttypes back.json
Raskolnikov
  • 315
  • 1
  • 2
  • 7