Search code examples
pythondjangomodelmigration

cannot cast type character varying[] to jsonb django migration


I have alter my model from arrayfield to json field now i am receiving error

cannot cast type character varying[] to jsonb LINE 1: ...LUMN "questionaires" TYPE jsonb USING "questionaires"::jsonb.

How to fix this ? and how it did occur?

from

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

to

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

Solution

  • I think you have to perform multiple stage migrates:

    1. Create temporary new field with type JSONField: Ex questionaires_2
    2. Write custom python migration RunPython to convert data manually
    3. Delete old field: questionaires
    4. Rename temporary field to the old one questionaires_2 -> questionaires

    More advance: refer to this https://stackoverflow.com/a/21997589/533738

    Not tested!!!

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