diff --git a/combo/apps/search/migrations/0007_french_fts.py b/combo/apps/search/migrations/0007_french_fts.py index b088a26d..6e9cb91b 100644 --- a/combo/apps/search/migrations/0007_french_fts.py +++ b/combo/apps/search/migrations/0007_french_fts.py @@ -2,8 +2,9 @@ # Generated by Django 1.11.17 on 2020-02-19 08:20 from __future__ import unicode_literals -from django.db import migrations +from django.db import migrations, transaction from django.db.migrations.operations.base import Operation +from django.db.utils import InternalError, OperationalError, ProgrammingError class TextSearchConfiguration(Operation): @@ -15,12 +16,26 @@ class TextSearchConfiguration(Operation): def database_forwards(self, app_label, schema_editor, from_state, to_state): if schema_editor.connection.vendor != 'postgresql': return - schema_editor.execute('CREATE EXTENSION IF NOT EXISTS unaccent SCHEMA public') + try: + with transaction.atomic(): + try: + schema_editor.execute('CREATE EXTENSION IF NOT EXISTS unaccent SCHEMA public') + except (OperationalError, ProgrammingError): + # OperationalError if the extension is not available + # ProgrammingError in case of denied permission + dictionaries = 'french_stem' + else: + dictionaries = 'public.unaccent, french_stem' + except InternalError: + # InternalError (current transaction is aborted, commands ignored + # until end of transaction block) would be raised when django- + # tenant-schemas set search_path. + pass schema_editor.execute('CREATE TEXT SEARCH CONFIGURATION french_unaccent( COPY = french )') schema_editor.execute( 'ALTER TEXT SEARCH CONFIGURATION french_unaccent ' 'ALTER MAPPING FOR hword, hword_part, word ' - 'WITH public.unaccent, french_stem') + 'WITH %s' % dictionaries) def database_backwards(self, app_label, schema_editor, from_state, to_state): if schema_editor.connection.vendor != 'postgresql':