#31665: Auto-migrations fail on postgres when resizing Charfield and setting
default value longer than old constraint
-------------------------------------+-------------------------------------
     Reporter:  shadytradesman       |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Migrations           |                  Version:  2.2
     Severity:  Normal               |               Resolution:
     Keywords:  charfield resize     |             Triage Stage:
  default alterfield max_length      |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by shadytradesman:

Old description:

> Migration to create the field
>
> {{{
> # Generated by Django 2.2.12 on 2020-05-29 19:06
>
> import cells.models
> from django.db import migrations, models
>

> class Migration(migrations.Migration):
>
>     dependencies = [
>         ('cells', '0003_auto_20200529_1832'),
>     ]
>
>     operations = [
>         migrations.AddField(
>             model_name='cell',
>             name='invite_link_secret_key',
>             field=models.CharField(default=cells.models.random_string,
> max_length=7),
>         ),
>     ]
> }}}
>
> Migration to resize the field and add a default:
> {{{
> # Generated by Django 2.2.12 on 2020-05-29 23:56
>
> import cells.models
> from django.db import migrations, models
>

> class Migration(migrations.Migration):
>
>     dependencies = [
>         ('cells', '0004_auto_20200529_2006'),
>     ]
>
>     operations = [
>         migrations.AlterField(
>             model_name='cell',
>             name='invite_link_secret_key',
>             field=models.CharField(default=cells.models.random_string,
> max_length=64),
>         ),
>     ]
>
> }}}
>
> Here is the random string method:
> {{{
> def random_string():
>     return hashlib.sha224(bytes(random.randint(1, 99999999))).hexdigest()
> }}}
>

> This migration appeared to work on mysql when I was developing locally,
> but it may be because I updated the random_string() function to provide a
> string that was longer after I ran the migration. It failed when I ran it
> against my prod Postgres 9.5.15 database.

New description:

 Migration to create the field

 {{{
 # Generated by Django 2.2.12 on 2020-05-29 19:06

 import cells.models
 from django.db import migrations, models


 class Migration(migrations.Migration):

     dependencies = [
         ('cells', '0003_auto_20200529_1832'),
     ]

     operations = [
         migrations.AddField(
             model_name='cell',
             name='invite_link_secret_key',
             field=models.CharField(default=cells.models.random_string,
 max_length=7),
         ),
     ]
 }}}

 Migration to resize the field:
 {{{
 # Generated by Django 2.2.12 on 2020-05-29 23:56

 import cells.models
 from django.db import migrations, models


 class Migration(migrations.Migration):

     dependencies = [
         ('cells', '0004_auto_20200529_2006'),
     ]

     operations = [
         migrations.AlterField(
             model_name='cell',
             name='invite_link_secret_key',
             field=models.CharField(default=cells.models.random_string,
 max_length=64),
         ),
     ]

 }}}

 Here is the random string method:
 {{{
 def random_string():
     return hashlib.sha224(bytes(random.randint(1, 99999999))).hexdigest()
 }}}


 This migration appeared to work on mysql when I was developing locally,
 but it may be because I updated the random_string() function to provide a
 string that was longer after I ran the migration. It failed when I ran it
 against my prod Postgres 9.5.15 database.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31665#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/072.288a17004d41e52fdeb0b684fe6cfbd4%40djangoproject.com.

Reply via email to