将 Json 文件中的数据加载到 PostgresSql 中会导致:错误“重复键值违反唯一约束 - 已存在。”

Posted

技术标签:

【中文标题】将 Json 文件中的数据加载到 PostgresSql 中会导致:错误“重复键值违反唯一约束 - 已存在。”【英文标题】:Loading data from Json file into PostgresSql causes: ERROR "duplicate key value violates unique constraint - already exists." 【发布时间】:2019-09-02 15:36:07 【问题描述】:

我正在将我的 Django 网站部署到 Google Cloud。步骤之一是将数据库更改为 postgresSQL。当我在本地使用 SqlLite 时,我想将所有数据库迁移到 postgresSql 中。我按照在线指南先转储数据,然后将 settings.py 中的数据库更改为新数据库。我已经完成了这个命令的一切;

    python manage.py loaddata datadump.json

其中 datadump.json 是从 SQLITE 转储的数据库。现在我被这个错误困住了

      django.db.utils.IntegrityError: Problem installing fixtur, Could not 
    load users.Profile(pk=3): duplicate key value violates unique 
    constraint "users_profile_user_id_key" DETAIL:  Key (user_id)=(1) already exists.

我不知道该怎么做。我查到的一些答案是这样的:

postgresql duplicate key violates unique constraint

Django admin "duplicate key value violates unique constraint" Key (user_id)=(1) already exists

没有帮助,因为我无法理解发生了什么。 6 年前我确实使用过 mysql,但我无法理解这一点。

我设法从在线资源中运行了一些 SQL 命令,并为我的数据库生成了这些命令:

!https://imgur.com/a/qQNLEs7

我遵循了这些指南:

https://medium.com/@aaditya.chhabra/how-to-use-postgresql-with-your-django-272d59d28fa5

https://www.shubhamdipt.com/blog/django-transfer-data-from-sqlite-to-another-database/

【问题讨论】:

【参考方案1】:
    删除数据库

    创建一个新的并运行迁移

    python manage.py 迁移

并尝试使用 json 文件导入数据,

python manage.py loaddata datadump.json

错误是由您使用“createsuperuser”命令创建的数据库中的超级用户对象引起的。

【讨论】:

我试图这样做,仍然给出了同样的错误。很明显,我没有任何超级用户。这是错误; django.db.utils.IntegrityError:安装夹具“C:\Users\~\myDjangoSite\venv\my Site\datadump.json”时出现问题:无法加载 contenttypes.ContentType(pk=1):重复键值违反了唯一约束“ django_c ontent_type_app_label_model_76bd3d3b_uniq" DETAIL: Key (app_label, model)=(admin, logentry) 已经存在。 这是来自 >python manage.py migrate 的日志 要执行的操作:应用所有迁移:管理员、身份验证、博客、内容类型、会话、用户 正在运行迁移:没有要应用的迁移。【参考方案2】:

TL;DR

只需从django_site 表中删除不需要的记录。


简介

我遇到了同样的问题,因为我在我的网站中使用了 Signin with Google。所以我试了两次,看看如何设置社交登录。结果,表 django_site 创建了 2 条记录。只需从该 TableCollection

中删除不需要的记录

【讨论】:

嗨,怎么办?我的意思是我怎么知道表中有不需要的记录? 如果您只使用过 Signin with Google。打开你的数据库。现在,打开名为django_site 的表。如果有超过 1 条记录,则该记录是不需要的记录。就我而言,id:1 是不需要的。如果您同时使用了多个身份验证,例如 facebook 和 google。对不起,我帮不了你。

以上是关于将 Json 文件中的数据加载到 PostgresSql 中会导致:错误“重复键值违反唯一约束 - 已存在。”的主要内容,如果未能解决你的问题,请参考以下文章

将 Pyspark 数据帧加载到 postgres RDS 中的表中时出错

如何将 postgres 数据库转换为 JSON 文件?

如何将资产文件夹中的 JSON 数据加载到 Recyclerview

将 JSON 文件中的项目数据动态加载到 React

使用 Pandas .to_sql 将 JSON 列写入 Postgres

如何将现有函数(包括聚合)包装到 Postgres 中的新函数中?