#28888: Index added to _meta.indexes with Meta.indexes=[] yields two equal
addIndex() operations.
-------------------------------------+-------------------------------------
Reporter: Jan Pieter | Owner: nobody
Waagmeester |
Type: Uncategorized | Status: new
Component: Migrations | Version: 1.11
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Jan Pieter Waagmeester:
Old description:
> 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`.
New description:
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`.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/28888#comment:1>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/064.f9b6ec76d4e56c727c51630164693296%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.