#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.