﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36165	Postgres schema editor throws away custom index deletion SQL	Daniel Finch	Natalia Bidart	"If I wanted to create a Postgres database index type that used custom SQL for both creation and deletion, the custom SQL would only apply in the create case.

Here's some example code:


{{{
from django.db.models import Index

class UniqueIndex(Index):
    # Adjusted version of DatabaseSchemaEditor.sql_create_index that works with materialized views
    sql_create_index = ""CREATE UNIQUE INDEX %(name)s ON %(table)s%(using)s (%(columns)s);""
    sql_delete_index = ""DROP INDEX IF EXISTS %(name)s;""

    def create_sql(self, model, schema_editor, using="""", **kwargs):
        kwargs.setdefault(""sql"", self.sql_create_index)
        return super().create_sql(model, schema_editor, using, **kwargs)

    def remove_sql(self, model, schema_editor, **kwargs):
        kwargs.setdefault(""sql"", self.sql_delete_index)
        return super().remove_sql(model, schema_editor, **kwargs)
}}}

The call to `create_sql` would do the right thing, and use the SQL supplied - as seen in the underlying code:

{{{
        sql = sql or (
            self.sql_create_index
            if not concurrently
            else self.sql_create_index_concurrently
        )
}}}

https://github.com/django/django/blob/5f30fd2358fd60a514bdba31594bfc8122f30167/django/db/backends/postgresql/schema.py#L349-L353

However, the same cannot be said for the delete code, which simply ignores the provided SQL value:

{{{
        sql = (
            self.sql_delete_index_concurrently
            if concurrently
            else self.sql_delete_index
        )
}}}

https://github.com/django/django/blob/5f30fd2358fd60a514bdba31594bfc8122f30167/django/db/backends/postgresql/schema.py#L324-L330

I believe this constitutes a bug and should have an obvious and simple fix.
"	Bug	closed	Database layer (models, ORM)	dev	Normal	fixed		Mariusz Felisiak	Ready for checkin	1	0	0	0	0	0
