【发布时间】:2017-05-31 16:54:31
【问题描述】:
我有一个使用 bradjasper 的 django-jsonfield 包的 Postgres 9.4 / Django 1.8 数据库。 (见https://github.com/bradjasper/django-jsonfield )它运行良好,但我想升级现有数据以使用 Postgres 9.6 和 Django 1.9 的内置 JSONField。 (请参阅 https://docs.djangoproject.com/en/1.10/ref/contrib/postgres/fields/#jsonfield )这将允许对 JSON 内容进行更强大的搜索。
如何将旧数据库升级到新数据库?
我尝试过的: 我尝试将一对模式迁移插入到
- 将 bradjasper JSONField 转换为 TextField,包括运行迁移。 (这不应该更改数据库,因为 bradjasper 将数据存储为字符串。)
- 运行 Django 的
dumpdata命令。 - 更新了 Postgres 和 Django 版本。
- 运行迁移以将 TextField 转换为 Django 的 JSONField。 (这应该是数据库中的更改,从
text或json到jsonb。) - 运行 Django 的
loaddata命令。这会产生如下错误:u"[] (type <type 'unicode'>) is not a valid list for field url_methods"]: (myapp.mytable:pk=1) field_value was '[]'我正在查看 postgresql migrating JSON to JSONB 和 Upgrade PostgreSQL JSON column to JSONB?,但希望尽量减少自定义 SQL。
【问题讨论】:
-
您是否还编辑/删除了现有迁移?在加载数据之前?
-
我在 dumpdata 之前通过 convert-to-textfield 步骤向上运行迁移,然后在 loaddata 之前运行 convert-from-textfield 迁移。编辑了尝试的步骤,使其更加清晰。
标签: json django postgresql jsonb