search: allow failures to enable unaccent extension (#40024)

This commit is contained in:
Frédéric Péters 2020-02-19 15:31:57 +01:00
parent e2348d6977
commit 3004989cdc
1 changed files with 18 additions and 3 deletions

View File

@ -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':