diff options
author | Ian Foote <python@ian.feete.org> | 2017-10-11 22:55:52 +0530 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-06-29 17:00:28 -0400 |
commit | 38cada7c94f5f73d2d47a0a730ea5d71d266fa2c (patch) | |
tree | f7cfb69df62a07b0cda4b3c0d1c4a2f6ea5780bf /django/db/backends/postgresql/schema.py | |
parent | b4cba4ed625ce7c88675616b3bbb237c28a926d1 (diff) | |
download | django-38cada7c94f5f73d2d47a0a730ea5d71d266fa2c.tar.gz |
Fixed #28077 -- Added support for PostgreSQL opclasses in Index.
Thanks Vinay Karanam for the initial patch.
Diffstat (limited to 'django/db/backends/postgresql/schema.py')
-rw-r--r-- | django/db/backends/postgresql/schema.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/django/db/backends/postgresql/schema.py b/django/db/backends/postgresql/schema.py index 18388cc523..feaddfab52 100644 --- a/django/db/backends/postgresql/schema.py +++ b/django/db/backends/postgresql/schema.py @@ -1,6 +1,7 @@ import psycopg2 from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.backends.ddl_references import IndexColumns class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): @@ -12,8 +13,6 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): sql_set_sequence_max = "SELECT setval('%(sequence)s', MAX(%(column)s)) FROM %(table)s" sql_create_index = "CREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(extra)s" - sql_create_varchar_index = "CREATE INDEX %(name)s ON %(table)s (%(columns)s varchar_pattern_ops)%(extra)s" - sql_create_text_index = "CREATE INDEX %(name)s ON %(table)s (%(columns)s text_pattern_ops)%(extra)s" sql_delete_index = "DROP INDEX IF EXISTS %(name)s" # Setting the constraint to IMMEDIATE runs any deferred checks to allow @@ -49,9 +48,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): if '[' in db_type: return None if db_type.startswith('varchar'): - return self._create_index_sql(model, [field], suffix='_like', sql=self.sql_create_varchar_index) + return self._create_index_sql(model, [field], suffix='_like', opclasses=['varchar_pattern_ops']) elif db_type.startswith('text'): - return self._create_index_sql(model, [field], suffix='_like', sql=self.sql_create_text_index) + return self._create_index_sql(model, [field], suffix='_like', opclasses=['text_pattern_ops']) return None def _alter_column_type_sql(self, model, old_field, new_field, new_type): @@ -132,3 +131,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): if old_field.unique and not (new_field.db_index or new_field.unique): index_to_remove = self._create_index_name(model._meta.db_table, [old_field.column], suffix='_like') self.execute(self._delete_constraint_sql(self.sql_delete_index, model, index_to_remove)) + + def _index_columns(self, table, columns, col_suffixes, opclasses): + if opclasses: + return IndexColumns(table, columns, self.quote_name, col_suffixes=col_suffixes, opclasses=opclasses) + return super()._index_columns(table, columns, col_suffixes, opclasses) |