﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
25577	Squashed migrations do not work if deletion of indexed field can't be optimized on postgresql database	Jacek Bzdak	nobody	"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. 
"	Bug	closed	Migrations	1.8	Normal	duplicate			Unreviewed	0	0	0	0	0	0
