Opened 6 years ago

Last modified 6 years ago

#28888 new Cleanup/optimization

Index added to _meta.indexes with Meta.indexes=[] yields two equal addIndex() operations. — at Version 1

Reported by: Jan Pieter Waagmeester Owned by: nobody
Component: Database layer (models, ORM) Version: 1.11
Severity: Normal Keywords:
Cc: Triage Stage: Someday/Maybe
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Jan Pieter Waagmeester)

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 to class Meta 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.

Change History (1)

comment:1 by Jan Pieter Waagmeester, 6 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top