【问题标题】:cannot cast type character varying[] to jsonb django migration无法将类型字符变化 [] 转换为 jsonb django 迁移
【发布时间】:2019-05-22 06:15:38
【问题描述】:

我已经将我的模型从 arrayfield 更改为 json 字段,现在我收到错误

不能将类型字符变 [] 转换为 jsonb 第 1 行:...LUMN "questionaires" TYPE jsonb USING "questionaires"::jsonb.

如何解决这个问题?以及它是如何发生的?

来自

questionaires   = ArrayField(models.CharField(max_length=4000), null=True, blank=True)

到

questionaires   = JSONField(null = True,blank = True)

【问题讨论】:

  • Django 无法将 questionaires 字段中的数据从数组转换为 json。您的模型/关系中是否已经有一些数据?如果没有,您可以尝试删除ArrayField、migrate,重新添加新的JSONField 和migrate。

标签: python django model migration


【解决方案1】:

我认为您必须执行多个阶段迁移:

  1. 创建 JSONField 类型的临时新字段:Ex questionaires_2
  2. 编写自定义python迁移RunPython手动转换数据
  3. 删除旧字段:问卷调查
  4. 将临时字段重命名为旧的 questionaires_2 -> questionaires

更高级:参考这个https://stackoverflow.com/a/21997589/533738

未测试!!!

ALTER TABLE <Your Table>
ALTER COLUMN questionaires TYPE JSONB
      USING translate(questionaires::text, '{}','[]')::JSONB;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 2019-02-26
    • 1970-01-01
    • 2021-09-08
    • 2014-09-22
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多