Django sqlite 到 postgres 数据库迁移

Django sqlite to postgres database migration

我有一个相当大的 750MB 数据库,我需要将其从 sqlite 迁移到 postgres。因为,数据库很大,我遇到了一些以前关于同一主题的问题没有遇到的问题。

几天前,我迁移了一个 sqlite 大小为 30MB 的数据库,loaddatadumpdata 命令没有任何问题。但是对于这个大数据库,我的一个应用程序在 运行 命令 dumpdata 时抛出 Database image is malformed 错误。我的另一个应用程序成功转储但未加载。我已经看到带有 -v 3 详细标志的对象甚至没有被处理。准确地说,虽然 运行 来自 json 文件的 loaddata 命令数据首先被处理以检查重复的主键和其他模型约束,然后这些数据用于创建模型对象。但是对于这个应用程序,首先不处理数据。

除了这两个命令之外,还有一些其他方法可以进行迁移。但是,模式以我不想做的方式完全改变了。此外,我遇到了 DurationField 在迁移后变成字符串的问题,我无法对这些字段进行类型转换。 Bigint 变成 int 并且 varchar 变成 text 等等都是一些问题。我受不起这种问题。

读取 this 图像格式错误的部分。

从一个数据库迁移到另一个数据库时,您应该首先转储所有数据,然后 运行 在新数据库上进行 django 迁移并加载数据。那应该保留所有列类型。

运行加载数据时,先加载没有依赖的表,再加载依赖的表。

我找到了这些问题的问题。

  1. Database image is malformed 发生是因为我直接复制了整个数据库文件。就像 angardi 建议的那样,我使用 gzip 包压缩了 db 文件,然后复制了它。哪个解决了这个问题。

  2. 有两个问题 loaddata 没有加载某个应用程序。该应用程序包含一个模型,该模型具有自身的外键。并且模型的条目之一将外键设置为条目。这导致无限循环,应用程序未加载。即使在修复了条目之后,我也面临着同样的问题。发生这种情况是因为我转储了特定应用程序的数据。该应用程序的一个模型将 ManyToMany 字段设置为另一个应用程序的模型。虽然 loaddataForeignKey 字段引用未找到时抛出错误,但我认为它一直在搜索 ManyToMany 字段而没有抛出错误,这变成了无限循环类型的情况。我在这里要做的就是将整个数据库或相关应用程序转储到同一个文件中。