首页 > 解决方案 > 使用 DBeaver 将数据从 SQLite3 迁移到 Postgresql

问题描述

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

/engine/kernel/keyconcept/add/ 处的 IntegrityError

重复键值违反了唯一约束“kernel_keyconcept_pkey”详细信息:键 (id)=(4) 已存在。

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

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

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

我该如何解决这个问题?

标签: djangopostgresqlmigrationdbeaver

解决方案


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

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


推荐阅读