Opened 5 years ago
Last modified 5 years ago
#31665 closed Bug
Auto-migrations fail on postgres when resizing Charfield and setting default value longer than old constraint — at Initial Version
Reported by: | shadytradesman | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 2.2 |
Severity: | Normal | Keywords: | charfield resize default alterfield max_length |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
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.
Note:
See TracTickets
for help on using tickets.