#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 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/057.166717ac0d923ce5f33535e4bf275297%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.