#25180: ArrayFields should not have varchar_patterns_ops or text_patterns_ops
indexes
----------------------------------+-----------------
Reporter: fabianbuechler | Owner:
Type: Bug | Status: new
Component: contrib.postgres | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------+-----------------
I believe I bumped into a bug using the new PostgreSQL `ArrayField` from
1.8 in combination with `db_index=True`:
This seems to be related to Django ticket #12234 which introduced creating
secondary
`varchar_patterns_ops` or `text_patterns_ops` indexes for varchar or text
fields
respectively, so that PostgreSQL could use them for the `contains` filter
(e.g. `MyModel.object.filter(name__contains='abc')`).
However, for the array fields introduced with Django 1.8 this does not
seem to
work when having `db_index` activated. When `syncdb` or `migrate` try to
create the secondary index, PostgreSQL raises an error like this:
{{{#!python
django.db.utils.ProgrammingError: operator class "varchar_pattern_ops"
does not accept data type character varying[]
}}}
The executed SQL statement is something like this:
{{{#!sql
CREATE INDEX "shop_product_package_product_numbers_2ebd72fe1541fbd4_like"
ON "shop_product" ("package_product_numbers" varchar_pattern_ops)
}}}
The important parts of the model defintion are:
{{{#!python
class Product(models.Model):
package_product_numbers = ArrayField(
models.CharField(max_length=10, blank=True),
verbose_name="Package product numbers",
null=True, default=None, db_index=True)
}}}
I'm currently using a workaroud to fix this. I created a custom DB backend
that inherits from the postgresql_psycopg2 one and overwrites the
`DatabaseCreation.sql_indexes_for_field` and
`DatabaseSchemaEditor._model_indexes_sql` methods to check for ArrayFields
when creating those secondary indexes. I can post this code here, if you
need it, however, I don't think that this is the right solution, since the
PostgreSQL database backend should not really need to know anything about
the `django.contrib.postgresql` stuff.
Please let me know if I can help to reproduce this.
--
Ticket URL: <https://code.djangoproject.com/ticket/25180>
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/057.166717ac0d923ce5f33535e4bf275297%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.