Opened 5 years ago
Closed 5 years ago
#30846 closed Bug (fixed)
postgis backend doesn't respect custom index names.
Reported by: | Thomas Steen Rasmussen | Owned by: | Pratik Kumar |
---|---|---|---|
Component: | GIS | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Ahmad Abdallah | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description
Hello,
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.
Change History (11)
comment:1 by , 5 years ago
Summary: | PostGIS not respecting index names → GeoDjango not respecting index names |
---|
comment:2 by , 5 years ago
Summary: | GeoDjango not respecting index names → postgis backend doesn't respect custom index names. |
---|---|
Triage Stage: | Unreviewed → Accepted |
Version: | 2.2 → master |
comment:3 by , 5 years ago
Easy pickings: | set |
---|
Tentatively set easy picking (without thorough examination).
comment:4 by , 5 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
I think I can take a look at this if no one started working already on this.
comment:5 by , 5 years ago
Owner: | changed from | to
---|
This ticket seems inactive. So I am assigning it to myself
comment:6 by , 5 years ago
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?
comment:7 by , 5 years ago
Pratik1999, PR is the proper place to discuss patches. At first glance, tests are missing.
comment:8 by , 5 years ago
Cc: | added |
---|
comment:9 by , 5 years ago
Has patch: | set |
---|
pull request :
https://github.com/django/django/pull/12440
comment:10 by , 5 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
Thanks for the report. Agreed, we should respect
Index.name
for spatial indexes.