#25577: Squashed migrations do not work if deletion of indexed field can't be
optimized on postgresql database
----------------------------+--------------------
     Reporter:  jbzdak      |      Owner:  nobody
         Type:  Bug         |     Status:  new
    Component:  Migrations  |    Version:  1.8
     Severity:  Normal      |   Keywords:
 Triage Stage:  Unreviewed  |  Has patch:  0
Easy pickings:  0           |      UI/UX:  0
----------------------------+--------------------
 I have following model:

 {{{
 class AModel(models.Model):
   indexed_field = models.CharField(max_length=200, db_index=True)
 }}}

 And three migrations:

 1. First one creates this model
 2. Second one runs a custom sql (this SQL is empty in my example, but it
 could for example copy contents of ``indexed_field`` column to another
 column)
 3. Third one deletes indexed field from the model

 If I run these three migrations separately they work.

 If I squash these migrations into one they stop working with following
 error:

 {{{
   File "/home/jb/programs/django-migrations-issue/venv/lib/python3.5/site-
 packages/django/db/backends/utils.py", line 64, in execute
     return self.cursor.execute(sql, params)
 django.db.utils.ProgrammingError: column "indexed_field" does not exist
 }}}

 My guess is this error is because:

 Index creation executed as a ``deferred_sql`` statement, which is executed
 at the end of migration. At the end of my squashed migration there is no
 ``indexed_field`` column on the table, and postgresql raises error.

 It works when migrations are separate because index creation is executed
 at the end of migration. It works on squashed migrations without RunSQL
 migration in between because field creation is entirely optimized.

 I have attached example project, if you try to migrate it, it will
 explode. If you remove squashed migration it will work.

--
Ticket URL: <https://code.djangoproject.com/ticket/25577>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.65d05b8c1fbadc1fbfeace3ce6559507%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to