﻿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
36632	AlterIndexTogether in historical migration drops overlapping indices	Michael Herrmann	nzioker	"1. Create a model with two index_together fields: `('a', 'b')`
2. Run `makemigrations`.
3. Add field `c` and change index_together to `(('a', 'b'), ('a', 'b', 'c'))`.
4. Run `makemigrations`.
5. Run `migrate`.

For at least SQLite, this silently drops the two-column index and only produces the three-column index.

I am attaching code that can be used to reproduce the issue. To run it, place all files in the same folder, `cd` into it and execute:

{{{
chmod +x steps.sh
./steps.sh
}}}

(This requires macOS or Linux. It should be easy to see how to execute the steps on Windows.)

Executing `steps.sh` with Django 5 produces error

{{{
ValueError: Found wrong number (0) of indexes for polls_mymodel(a, b).
}}}

On the other hand, executing the script with Django 4 succeeds without any errors.

(Please see the script for what I mean by ""executing with Django 4/5"".)

The script generates three migrations. And actually, the bug is already there after the second migration. But the third migration highlights the issue with an error message.

I am attaching script `show_indexes.py` that can be used to debug the issue. It shows the indexes in the SQLite database. When `steps.sh` is executed with Django 4 and without the third migration, then `show_indexes.py` displays two indexes - one for two and one for three columns. On the other hand, when `steps.sh` is executed with Django 5 (and without the third migration), then `show_indexes.py` only shows one index, for the three columns. `show_indexes.py` needs Django 4."	Bug	assigned	Database layer (models, ORM)	5.1	Normal		index_together	Michael Herrmann	Accepted	1	0	0	0	0	0
