使用 DBeaver 将数据从 SQLite3 迁移到 Postgresql



我的项目使用SQLite3 DB,但现在我需要从SQLite3迁移到PostgreSQL。我已经使用DBeaver使用"导入数据"选项来执行此操作。在将所有表从SQLite3导入PostgreSQL结束时,当我尝试添加新内容时,我注意到了此错误:

IntegrityError at/engine/kernel/keyconcept/add/

重复的键值违反了唯一约束 "kernel_keyconcept_pkey"详细信息:密钥 (id(=(4( 已存在。

如果我在这个项目中添加一个使用新DB(PostgreSQL(的新模型,则添加内容没有问题,但是如果我使用旧模型,我会看到上面的IntegrityError

我用一个只有两行的模型做了一个测试:第一次尝试时我收到了相同的错误,但对于键 ID 1,第二次尝试时我收到了相同的错误,但键 ID 2。当我第三次尝试时,我能够添加内容,下一次尝试也会发生同样的想法。

所以我认为迁移后每个表的行计数器永远不会从最后一个内容开始,而是从零开始。这很奇怪,因为以前我做过相同的迁移,但从 SQLite3 到 SQLite3 存在问题。

我该如何解决这个问题?

我已经使用 dumpdata 和 loaddata 而不是 DBeaver 解决了问题,并且按照此示例都可以正常工作。

就我而言,我需要将某些应用程序排除为身份验证和内容类型,然后使用转储数据,我使用了这个:

python3 manage.py dumpdata --exclude contenttypes --exclude auth --indent 2 > db.json

为了上传数据,我使用了这个:

python3 manage.py loaddata db.json

您必须重置用于生成主键的序列。有一个管理命令可以打印必要的 SQL:sqlsequencereset

请注意,它只打印出 SQL,您必须手动执行它(您可能可以使用 DBeaver 执行此操作(。

最新更新