From 2867b7eb4b8477710f11707d4b975db10e5f91a7 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Mon, 20 Mar 2017 16:21:01 +0100 Subject: [PATCH] Refs #27935 -- Fixed BrinIndex.max_name_length if a project's default database isn't PostgreSQL. Thanks Florian Apolloner for the report. --- django/contrib/postgres/indexes.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/django/contrib/postgres/indexes.py b/django/contrib/postgres/indexes.py index feb7053ed8..42215dfdce 100644 --- a/django/contrib/postgres/indexes.py +++ b/django/contrib/postgres/indexes.py @@ -1,12 +1,15 @@ -from django.db import connection from django.db.models import Index -from django.utils.functional import cached_property __all__ = ['BrinIndex', 'GinIndex'] class BrinIndex(Index): suffix = 'brin' + # Allow an index name longer than 30 characters since the suffix is 4 + # characters (usual limit is 3). Since this index can only be used on + # PostgreSQL, the 30 character limit for cross-database compatibility isn't + # applicable. + max_name_length = 31 def __init__(self, fields=[], name=None, pages_per_range=None): if pages_per_range is not None and pages_per_range <= 0: @@ -36,14 +39,6 @@ class BrinIndex(Index): schema_editor.quote_value(self.pages_per_range)) + parameters['extra'] return parameters - @cached_property - def max_name_length(self): - # Allow an index name longer than 30 characters since the suffix - # is 4 characters (usual limit is 3). Since this index can only be - # used on PostgreSQL, the 30 character limit for cross-database - # compatibility isn't applicable. - return connection.ops.max_name_length() - class GinIndex(Index): suffix = 'gin'