You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django从SQLite迁移至PostgreSQL导入dump.json出现slug重复键错误

Django SQLite迁移PostgreSQL slug重复报错解决方案

报错原因

执行migrate命令生成表结构时,Django内置模块或自定义迁移逻辑会自动插入部分初始数据,你备份的db.json中存在的slug=superadmin记录和PostgreSQL库中已生成的初始记录唯一键冲突,导致导入失败。

另外你当前操作存在两处错误也可能加重问题:

  • 导出的备份文件名为db.json,导入时错误写为dump.json
  • 导入命令格式错误,正确格式为loaddata(无空格)而非load data

解决方案

方案一:重置数据库后重新导入(优先推荐)

  • 删除当前连接的PostgreSQL数据库,重新创建一个空白数据库
  • 执行迁移命令,添加--fake-initial参数跳过初始迁移的默认数据插入:
python manage.py migrate --fake-initial
  • 使用正确命令导入备份数据:
python manage.py loaddata db.json

方案二:手动删除冲突记录后导入

如果无法重置数据库,直接修改备份文件跳过冲突项:

  • 打开db.json文件,搜索"slug": "superadmin"对应的整段数据条目,直接删除该条记录
  • 清空PostgreSQL库中已生成的表数据:
python manage.py flush
  • 执行正确的导入命令
  • 导入完成后手动在后台创建slug为superadmin的对应记录即可

方案三:导入时排除冲突模型

如果冲突记录属于内置模块(比如站点、权限分组),可以在导入时直接排除对应模型:

# 示例为排除auth分组模型,你可以替换为实际冲突的模型路径
python manage.py loaddata db.json --exclude auth.group

验证操作

导入完成后执行以下命令验证数据完整性:

python manage.py check
python manage.py shell -c "from django.contrib.auth.models import User; print('超级用户存在:', User.objects.filter(is_superuser=True).exists())"

内容的提问来源于stack exchange,提问作者usef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:27:05