Django sqlite 到 postgres 数据库迁移
Django sqlite to postgres database migration
我有一个相当大的 750MB 数据库,我需要将其从 sqlite
迁移到 postgres
。因为,数据库很大,我遇到了一些以前关于同一主题的问题没有遇到的问题。
几天前,我迁移了一个 sqlite
大小为 30MB 的数据库,loaddata
和 dumpdata
命令没有任何问题。但是对于这个大数据库,我的一个应用程序在 运行 命令 dumpdata
时抛出 Database image is malformed
错误。我的另一个应用程序成功转储但未加载。我已经看到带有 -v 3
详细标志的对象甚至没有被处理。准确地说,虽然 运行 来自 json 文件的 loaddata
命令数据首先被处理以检查重复的主键和其他模型约束,然后这些数据用于创建模型对象。但是对于这个应用程序,首先不处理数据。
除了这两个命令之外,还有一些其他方法可以进行迁移。但是,模式以我不想做的方式完全改变了。此外,我遇到了 DurationField
在迁移后变成字符串的问题,我无法对这些字段进行类型转换。 Bigint
变成 int
并且 varchar
变成 text
等等都是一些问题。我受不起这种问题。
读取 this 图像格式错误的部分。
从一个数据库迁移到另一个数据库时,您应该首先转储所有数据,然后 运行 在新数据库上进行 django 迁移并加载数据。那应该保留所有列类型。
运行加载数据时,先加载没有依赖的表,再加载依赖的表。
我找到了这些问题的问题。
Database image is malformed
发生是因为我直接复制了整个数据库文件。就像 angardi 建议的那样,我使用 gzip 包压缩了 db 文件,然后复制了它。哪个解决了这个问题。
有两个问题 loaddata
没有加载某个应用程序。该应用程序包含一个模型,该模型具有自身的外键。并且模型的条目之一将外键设置为条目。这导致无限循环,应用程序未加载。即使在修复了条目之后,我也面临着同样的问题。发生这种情况是因为我转储了特定应用程序的数据。该应用程序的一个模型将 ManyToMany
字段设置为另一个应用程序的模型。虽然 loaddata
在 ForeignKey
字段引用未找到时抛出错误,但我认为它一直在搜索 ManyToMany
字段而没有抛出错误,这变成了无限循环类型的情况。我在这里要做的就是将整个数据库或相关应用程序转储到同一个文件中。
我有一个相当大的 750MB 数据库,我需要将其从 sqlite
迁移到 postgres
。因为,数据库很大,我遇到了一些以前关于同一主题的问题没有遇到的问题。
几天前,我迁移了一个 sqlite
大小为 30MB 的数据库,loaddata
和 dumpdata
命令没有任何问题。但是对于这个大数据库,我的一个应用程序在 运行 命令 dumpdata
时抛出 Database image is malformed
错误。我的另一个应用程序成功转储但未加载。我已经看到带有 -v 3
详细标志的对象甚至没有被处理。准确地说,虽然 运行 来自 json 文件的 loaddata
命令数据首先被处理以检查重复的主键和其他模型约束,然后这些数据用于创建模型对象。但是对于这个应用程序,首先不处理数据。
除了这两个命令之外,还有一些其他方法可以进行迁移。但是,模式以我不想做的方式完全改变了。此外,我遇到了 DurationField
在迁移后变成字符串的问题,我无法对这些字段进行类型转换。 Bigint
变成 int
并且 varchar
变成 text
等等都是一些问题。我受不起这种问题。
读取 this 图像格式错误的部分。
从一个数据库迁移到另一个数据库时,您应该首先转储所有数据,然后 运行 在新数据库上进行 django 迁移并加载数据。那应该保留所有列类型。
运行加载数据时,先加载没有依赖的表,再加载依赖的表。
我找到了这些问题的问题。
Database image is malformed
发生是因为我直接复制了整个数据库文件。就像 angardi 建议的那样,我使用 gzip 包压缩了 db 文件,然后复制了它。哪个解决了这个问题。有两个问题
loaddata
没有加载某个应用程序。该应用程序包含一个模型,该模型具有自身的外键。并且模型的条目之一将外键设置为条目。这导致无限循环,应用程序未加载。即使在修复了条目之后,我也面临着同样的问题。发生这种情况是因为我转储了特定应用程序的数据。该应用程序的一个模型将ManyToMany
字段设置为另一个应用程序的模型。虽然loaddata
在ForeignKey
字段引用未找到时抛出错误,但我认为它一直在搜索ManyToMany
字段而没有抛出错误,这变成了无限循环类型的情况。我在这里要做的就是将整个数据库或相关应用程序转储到同一个文件中。