From 2e11543befc0b27922a9811e1949a3c18fea5452 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 14 Oct 2020 21:39:42 +0200 Subject: [PATCH] misc: do not silence failures of migration authentic2.0028 (#47699) --- .../migrations/0028_trigram_unaccent_index.py | 84 ++++--------------- 1 file changed, 16 insertions(+), 68 deletions(-) diff --git a/src/authentic2/migrations/0028_trigram_unaccent_index.py b/src/authentic2/migrations/0028_trigram_unaccent_index.py index 55d462cf..2b0d4e11 100644 --- a/src/authentic2/migrations/0028_trigram_unaccent_index.py +++ b/src/authentic2/migrations/0028_trigram_unaccent_index.py @@ -1,81 +1,29 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.18 on 2020-09-17 15:38 from __future__ import unicode_literals -from django.db import migrations, transaction -from django.db.migrations.operations.base import Operation -from django.db.utils import InternalError, OperationalError, ProgrammingError - - -class SafeExtensionOperation(Operation): - reversible = True - - def state_forwards(self, app_label, state): - pass - - def database_forwards(self, app_label, schema_editor, from_state, to_state): - if schema_editor.connection.vendor != 'postgresql': - return - try: - with transaction.atomic(): - try: - schema_editor.execute('CREATE EXTENSION IF NOT EXISTS %s SCHEMA public' % self.name) - except (OperationalError, ProgrammingError): - # OperationalError if the extension is not available - # ProgrammingError in case of denied permission - RunSQLIfExtension.extensions_installed = False - except InternalError: - # InternalError (current transaction is aborted, commands ignored - # until end of transaction block) would be raised when django- - # tenant-schemas set search_path. - RunSQLIfExtension.extensions_installed = False - - def database_backwards(self, app_label, schema_editor, from_state, to_state): - try: - with transaction.atomic(): - schema_editor.execute('DROP EXTENSION IF EXISTS %s' % self.name) - except InternalError: - # Raised when other objects depend on the extension. This happens in a multitenant - # context, where extension in installed in schema "public" but referenced in others (via - # public.gist_trgm_ops). In this case, do nothing, as the query should be successful - # when last tenant is processed. - pass - - -class RunSQLIfExtension(migrations.RunSQL): - extensions_installed = True - - def __getattribute__(self, name): - if name == 'sql' and not self.extensions_installed: - return migrations.RunSQL.noop - return object.__getattribute__(self, name) - - -class UnaccentExtension(SafeExtensionOperation): - name = 'unaccent' - - -class TrigramExtension(SafeExtensionOperation): - name = 'pg_trgm' +from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('authentic2', '0027_remove_deleteduser'), ] operations = [ - TrigramExtension(), - UnaccentExtension(), - RunSQLIfExtension( - sql=["CREATE OR REPLACE FUNCTION public.immutable_unaccent(text) RETURNS varchar AS $$ " - "SELECT public.unaccent('public.unaccent',$1::text); $$ LANGUAGE 'sql' IMMUTABLE"], - reverse_sql=['DROP FUNCTION IF EXISTS public.immutable_unaccent(text)'] - ), - RunSQLIfExtension( - sql=["CREATE INDEX custom_user_name_gist_idx ON custom_user_user USING gist " - "(LOWER(public.immutable_unaccent(first_name || ' ' || last_name)) public.gist_trgm_ops)"], - reverse_sql=['DROP INDEX IF EXISTS custom_user_name_gist_idx'], + migrations.RunSQL( + sql=[ + "CREATE EXTENSION IF NOT EXISTS unaccent SCHEMA public", + "CREATE EXTENSION IF NOT EXISTS pg_trgm SCHEMA public", + "CREATE OR REPLACE FUNCTION public.immutable_unaccent(text) RETURNS varchar AS $$ " + "SELECT public.unaccent('public.unaccent',$1::text); $$ LANGUAGE 'sql' IMMUTABLE", + "CREATE INDEX custom_user_name_gist_idx ON custom_user_user USING gist " + "(LOWER(public.immutable_unaccent(first_name || ' ' || last_name)) public.gist_trgm_ops)" + ], + reverse_sql=[ + "DROP INDEX IF EXISTS custom_user_name_gist_idx", + "DROP FUNCTION IF EXISTS public.immutable_unaccent(text)", + "DROP EXTENSION IF EXISTS pg_trgm", + "DROP EXTENSION IF EXISTS unaccent", + ], ), ] -- 2.28.0