Duplicate key issue when loading back.json file PostgreSQL
Asked Answered
P

2

14

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 ?

Professional answered 26/9, 2017 at 2:21 Comment(2)
if you just exclude ContentTypes - you might hit another duplicate and another, and another. It needs wider approach change I thinkDisquietude
There are some differences between a postgres native pg_restore and django loaddata. This article clearly explains these differences and possible solutions - deephacks.com/articles/entry/… But as @Vao Tsun advices, it would be better to find these constraint issues deep into your data.Ailssa
M
30

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
Montgolfier answered 6/12, 2019 at 6:40 Comment(2)
this works but now I can not log inFirenew
@Firenew it seems that the loaddata command has overwrite your users table also. Maybe you have a user from where you have loaded your db.json.Montgolfier
Y
9

You can use the following command to load data:

python manage.py loaddata --exclude auth.permission --exclude contenttypes back.json
Yangyangtze answered 25/1, 2023 at 18:43 Comment(1)
Cheers. Just to add, to prevent your user from being overwritten also add --exclude auth.user. And i also needed to add --exclude admin.logentry as i was getting an error relating to content_type ids from uninstalled appsBergwall

© 2022 - 2024 — McMap. All rights reserved.