Django ArrayField null=True migration with Postgresql
I do not think setting null=True
on the inner type gives you any benefit. The note in the docs you refer to only applies to the column itself, so as long as the ArrayField
is nullable, the database will not have to perform a full table rewrite.
If you allow the inner type to be null, you'll have to deal with that in your code, which might not be exactly what you want.
If u are adding the null=True only because documentation says:
... it’s recommended you always create new columns with
null=True
, as this way they will be added immediately.
I don't think that would be necessary here in the ArrayField
. Because you have already added a default value to your field. So any entry which is already present in database will have this default value(which is empty list in this case).
null=True
is added so that, in case you don't specify a default value, the field value can be set to null, and you don't have enter a default value manually during migration.
In future if u don't plan to enter null values to this field, then you can omit the null=True
part.
Let us say you have a table with following data:
id | user_id
----+---------
1 | 66
2 | 105
3 | 110
4 | 174
After adding default=list
and doing migrations, your data would be something like this. Note that you don't need to specify null=True
in this case.
id | user_id | tag
----+---------+-----
1 | 66 | {}
2 | 105 | {}
3 | 110 | {}
4 | 174 | {}
In case, you don't specify a default value and set null=True
, you data would be:
id | user_id | tag
----+---------+-----
1 | 66 |
2 | 105 |
3 | 110 |
4 | 174 |