I am trying to create an index for a table with some geodjango fields. The
PostGIS code doesn't take the index name into account, it always generates
one based on table and field name.
Compare
https://github.com/django/django/blob/master/django/contrib/gis/db/backends/postgis/schema.py#L38
with
https://github.com/django/django/blob/master/django/db/backends/base/schema.py#L967
and it is clear that some logic to determine the name is missing. That
leads to the following result in sqlmigrate:
{{{
--
-- Create index dar_navngivenvej_historik_vvnl on field(s)
vejnavnebeliggenhed_vejnavnelinje of model darnavngivenvejhistorik
--
CREATE INDEX
"dawarepl_dar_navngivenvej_historik_vejnavnebeliggenhed_vejnavnelinje_id"
ON "dawarepl_dar_navngivenvej_historik"USING GIST
("vejnavnebeliggenhed_vejnavnelinje");
--
-- Create index dar_navngivenvej_historik_vvno on field(s)
vejnavnebeliggenhed_vejnavneområde of model darnavngivenvejhistorik
--
CREATE INDEX
"dawarepl_dar_navngivenvej_historik_vejnavnebeliggenhed_vejnavneområde_id"
ON "dawarepl_dar_navngivenvej_historik"USING GIST
("vejnavnebeliggenhed_vejnavneområde");
--
-- Create index dar_navngivenvej_historik_vvtp on field(s)
vejnavnebeliggenhed_vejtilslutningspunkter of model
darnavngivenvejhistorik
--
CREATE INDEX
"dawarepl_dar_navngivenvej_historik_vejnavnebeliggenhed_vejtilslutningspunkter_id"
ON "dawarepl_dar_navngivenvej_historik"USING GIST
("vejnavnebeliggenhed_vejtilslutningspunkter");
--
}}}
In case it isn't clear, the index names in the SQL comment are "mine" from
the Meta: section of the model, but the index names used in the actual SQL
are the much longer autogenerated ones.
I believe this should be fixed with a construct like
https://github.com/django/django/blob/master/django/db/backends/base/schema.py#L967
so autogenerated names are only used when 'name' not in kwargs.
--
Ticket URL: <https://code.djangoproject.com/ticket/30846>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:1>
* version: 2.2 => master
* stage: Unreviewed => Accepted
Comment:
Thanks for the report. Agreed, we should respect `Index.name` for spatial
indexes.
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:2>
* easy: 0 => 1
Comment:
Tentatively set easy picking (without thorough examination).
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:3>
* status: new => assigned
* owner: nobody => Ahisahar Pretel
Comment:
I think I can take a look at this if no one started working already on
this.
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:4>
* owner: Ahisahar Pretel => Pratik1999
Comment:
This ticket seems inactive. So I am assigning it to myself
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:5>
Comment (by Pratik1999):
https://github.com/Pratik1999/django-1/tree/ticket_30846
These are the changes I have made, shall I submit the pull request? Or
more changes are needed?
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:6>
Comment (by felixxm):
Pratik1999, PR is the proper place to discuss patches. At first glance,
tests are missing.
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:7>
* cc: Ahmad Abdallah (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:8>
* has_patch: 0 => 1
Comment:
pull request :
[https://github.com/django/django/pull/12440]
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:9>
* stage: Accepted => Ready for checkin
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:10>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"20ba3ce4ac8e8438070568ffba76f7d8d4986a53" 20ba3ce4]:
{{{
#!CommitTicketReference repository=""
revision="20ba3ce4ac8e8438070568ffba76f7d8d4986a53"
Fixed #30846 -- Made PostGIS backend respect Index's name argument.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/30846#comment:11>