我的项目使用SQLite3数据库,但是现在我需要从SQLite3迁移到PostgreSQL。我已经使用DBeaver的“导入数据”选项来做到这一点。从SQLite3到PostgreSQL的所有表导入结束时,当我尝试添加新内容时,我都注意到了此错误:
/ engine / kernel / keyconcept / add /
处的IntegrityError重复的键值违反了唯一约束 “ kernel_keyconcept_pkey”详细信息:密钥(id)=(4)已经存在。
如果我在这个项目中使用新的DB(PostgreSQL)添加一个新模型,则添加内容没有问题,但是如果使用旧模型,我会看到上面的 IntegrityError
我已经对只有两行的模型进行了测试:第一次尝试时,我收到了相同的错误,但键号为1;第二次尝试时,我收到了相同的错误,但键号为2。我已经第三次尝试添加内容,下次尝试时也会发生同样的想法。
因此,我认为迁移后每个表的行计数器从不从最后一个内容开始,而是从零开始。很奇怪,因为以前我做过相同的迁移,但是从SQLite3迁移到SQLite3时遇到了问题。
我该如何解决?
答案 0 :(得分:0)
您必须重置用于生成主键的序列。有一个管理命令可以打印必要的SQL:sqlsequencereset
请注意,它仅打印出SQL,您必须手动执行它(您可以使用DBeaver来执行)。
答案 1 :(得分:0)
我已经解决了使用dumpdata和loaddata而不是DBeaver的问题,并且遵循this examples都可以正常工作。
就我而言,我需要排除某些应用程序作为身份验证和内容类型,然后使用dumpdata进行以下操作:
python3 manage.py dumpdata --exclude contenttypes --exclude auth --indent 2 > db.json
要上传数据,我使用了以下方法:
python3 manage.py loaddata db.json