Opened 2 hours ago
#36632 new Bug
AlterIndexTogether drops overlapping indexes
Reported by: | Michael Herrmann | Owned by: | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 5.2 |
Severity: | Normal | Keywords: | |
Cc: | Michael Herrmann | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
- Create a model with two index_together fields:
('a', 'b')
- Run
makemigrations
. - Add field
c
and change index_together to(('a', 'b'), ('a', 'b', 'c'))
. - Run
makemigrations
. - 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.
Attachments (5)
Change History (5)
by , 2 hours ago
Attachment: | models_1.py added |
---|
by , 2 hours ago
Attachment: | models_2.py added |
---|
by , 2 hours ago
Attachment: | models_3.py added |
---|
by , 2 hours ago
Attachment: | show_indexes.py added |
---|