#28888: Index added to _meta.indexes with Meta.indexes=[] yields two equal
addIndex() operations.
--------------------------------------------------+------------------------
               Reporter:  Jan Pieter Waagmeester  |          Owner:  nobody
                   Type:  Uncategorized           |         Status:  new
              Component:  Migrations              |        Version:  1.11
               Severity:  Normal                  |       Keywords:
           Triage Stage:  Unreviewed              |      Has patch:  0
    Needs documentation:  0                       |    Needs tests:  0
Patch needs improvement:  0                       |  Easy pickings:  0
                  UI/UX:  0                       |
--------------------------------------------------+------------------------
 I use a custom field derived from
 `django.contrib.postgres.fields.JSONField`, which adds an `GinIndex` to
 `model._meta.indexes`:
 {{{
 from django.contrib.postgres.fields import JSONField
 from django.contrib.postgres.indexes import GinIndex

 class CustomJSONField(JSONField):
     def contribute_to_class(self, cls, name):
         super(CustomJSONField, self).contribute_to_class(cls, name)

         index = GinIndex(fields=[name])
         index.set_name_with_model(cls)
         cls._meta.indexes.append(index)
 }}}

 When used in a model like this,
 {{{
 class Blog(models.Model):
     title = models.CharField(max_length=100)
     json = CustomJSONField()
 }}}

 Migrations for model and index are created as expected:
 {{{
 ./manage.py --version
 1.11.8
 ./manage.py makemigrations app
 Migrations for 'app':
   app/migrations/0001_initial.py
     - Create model Blog
     - Create index app_blog_json_2cf556_gin on field(s) json of model blog
 }}}

 But when I add an empty list of indexes like this:

 {{{
 class Blog(models.Model):
     title = models.CharField(max_length=100)
     json = CustomJSONField()

     class Meta:
         indexes = []
 }}}
 two indexes are created:

 {{{
 rm -rf app/migrations
 ./manage.py --version
 1.11.8
 ./manage.py makemigrations app
 Migrations for 'app':
   app/migrations/0001_initial.py
     - Create model Blog
     - Create index app_blog_json_2cf556_gin on field(s) json of model blog
     - Create index app_blog_json_2cf556_gin on field(s) json of model blog
 }}}

 Which of course results in `django.db.utils.ProgrammingError: relation
 "app_blog_json_2cf556_gin" already exists`.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/28888>
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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.87973ef6a467674c978e56432b43dfa7%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to