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

Migrating data from SQLite3 to Postgresql using DBeaver

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

IntegrityError at /engine/kernel/keyconcept/add/

duplicate key value violates unique constraint "kernel_keyconcept_pkey" DETAIL: Key (id)=(4) already exists.

如果我在这个项目中添加一个使用新数据库 (PostgreSQL) 的新模型,添加内容没有问题,但如果我使用旧模型,我会看到 IntegrityError 以上.

我用只有两行的模型进行了测试:第一次尝试时我收到了相同的错误,但密钥 ID 为 1,第二次尝试时我收到了相同的错误,但密钥 ID 为 2。当我第三次尝试时,我能够添加内容,并且在下一次尝试中发生同样的想法。

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

我该如何解决这个问题?

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

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

我已经使用 dumpdata and loaddata instead of DBeaver and following this examples 解决了所有问题。

在我的例子中,我需要排除一些应用程序作为 auth 和 contenttypes,然后使用 dumpdata 我使用了这个:

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

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

python3 manage.py loaddata db.json