From 91b2bc3e70be2632baad86488fb03cf02848b5b6 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Wed, 24 May 2017 07:25:59 +0200 Subject: Fixed #27860 -- Dropped varchar_pattern_ops/text_pattern_ops index before altering char/text field in PostgreSQL. Thanks Tim Graham for the review. --- django/db/backends/postgresql/schema.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'django/db/backends/postgresql/schema.py') diff --git a/django/db/backends/postgresql/schema.py b/django/db/backends/postgresql/schema.py index f6be40f846..8d4db4ea1c 100644 --- a/django/db/backends/postgresql/schema.py +++ b/django/db/backends/postgresql/schema.py @@ -104,6 +104,15 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): def _alter_field(self, model, old_field, new_field, old_type, new_type, old_db_params, new_db_params, strict=False): + # Drop indexes on varchar/text columns that are changing to a different + # type. + if (old_field.db_index or old_field.unique) and ( + (old_type.startswith('varchar') and not new_type.startswith('varchar')) or + (old_type.startswith('text') and not new_type.startswith('text')) + ): + index_name = self._create_index_name(model, [old_field.column], suffix='_like') + self.execute(self._delete_constraint_sql(self.sql_delete_index, model, index_name)) + super()._alter_field( model, old_field, new_field, old_type, new_type, old_db_params, new_db_params, strict, -- cgit v1.2.1