Opened 9 years ago
Last modified 9 years ago
#25752 closed Bug
RenameField on m2m causes error when new m2m field is added with old name — at Version 3
Reported by: | skyjur | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 1.7 |
Severity: | Normal | Keywords: | postgres migrations renamefield |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Given I have a field
many = ManyToManyField()
I create a migration:
RenameField: "many" to "many_legacy" Create Field: "many" as ManyToManyField()
When I run the migration I get:
... File "django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "django/db/utils.py", line 97, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation "cms_test_many_2e06cda4" already exists
It seems the problem is that RenameField does not rename database indexes, and then when new m2m field is being added it tries to create index with same name and so I get database error.
Here is full migration code which throws this error:
class Migration(migrations.Migration): dependencies = [ ] operations = [ migrations.RenameField( 'test', 'many', 'many_legacy', ), migrations.AddField( model_name='test', name='many', field=models.ManyToManyField(to='cms.NewRel2'), ), ]
Initially I noticed this error on 1.7, then I also managed to replicate it on 1.8
Error happened on postgres database.
Change History (3)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
Type: | Uncategorized → Bug |
---|
comment:3 by , 9 years ago
Description: | modified (diff) |
---|
Note:
See TracTickets
for help on using tickets.