加载 back.json 文件 PostgreSQL 时出现重复键问题

Posted

技术标签:

【中文标题】加载 back.json 文件 PostgreSQL 时出现重复键问题【英文标题】:Duplicate key issue when loading back.json file PostgreSQL 【发布时间】:2018-03-07 02:41:21 【问题描述】:

我有一个 PostgreSQL 数据库,我在其中执行了 python manage.py dumpdata 以将数据备份到 json 文件中。我创建了一个新的 PostgreSQL 数据库,执行了迁移,一切都像发条一样工作。当我尝试使用 python manage.py loaddata backup.json 加载 backup.json 文件时,给了我这个错误。

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.

我检查了 phpPgAdmin,新闻有一行。有没有办法在不包括内容类型的情况下加载备份 json 文件,或者更好地转储除内容类型数据之外的所有内容?

【问题讨论】:

如果您只是排除 ContentTypes - 您可能会遇到另一个重复项和另一个重复项。我认为它需要更广泛的方法改变 postgres 原生 pg_restore 和 django loaddata 之间存在一些差异。本文清楚地解释了这些差异和可能的解决方案 - deephacks.com/articles/entry/… 但正如 @Vao Tsun 建议的那样,最好将这些约束问题深入到您的数据中。 【参考方案1】:

我遇到了类似的错误:

django.db.utils.IntegrityError:安装夹具时出现问题 '/home/knysys/ogmius/ogmius/db.json': 无法加载 contenttypes.ContentType(pk=2):重复的键值违反了唯一性 约束“django_content_type_app_label_model_76bd3d3b_uniq”详细信息: Key (app_label, model)=(auth, user) 已经存在

之后,我发现如果你是从另一个数据库恢复一个新的数据库,你需要像这样dumpdata

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

然后像这样加载新的数据库:

./manage.py loaddata db.json

【讨论】:

以上是关于加载 back.json 文件 PostgreSQL 时出现重复键问题的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQ 连接问题 FATAL: no pg_hba.conf entry for host

pythonpickle模块

关于Ajax和Json的面试题

PostgreSQL 将数据库存储在哪里?

PostgreSQL 将数据库存储在哪里?

记一次在线安装postgresql-9.4的问题