[Django] #32721: Geometry Index with PostGIS using schema

36 views
Skip to first unread message

Django

unread,
May 6, 2021, 11:30:24 AM5/6/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
----------------------------------------+------------------------
Reporter: Alan D. Snow | Owner: nobody
Type: Bug | Status: new
Component: GIS | Version: 3.2
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
----------------------------------------+------------------------
If you have a model like this:
{{{
from django.contrib.gis.db import models as gis_models
from django.db import models

class MyModel(models.Model):
geometry = gis_models.GeometryField(
help_text="The area of interest.",
spatial_index=True,
srid=4326,
)
class Meta:
db_table = 'source"."mymodel'
}}}

When you go to run migrations, this error occurs:
{{{
self = <django.db.backends.utils.CursorWrapper object at 0x7f3001dcadc0>
sql = 'CREATE INDEX "source"."mymodel_geometry_id" ON "source"."mymodel"
USING GIST ("geometry")'
params = ()
ignored_wrapper_args = (False, {'connection':
<django.contrib.gis.db.backends.postgis.base.DatabaseWrapper object at
0x7f3002ab6790>, 'cursor': <django.db.backends.utils.CursorWrapper object
at 0x7f3001dcadc0>})

def _execute(self, sql, params, *ignored_wrapper_args):
self.db.validate_no_broken_transaction()
with self.db.wrap_database_errors:
if params is None:
# params default might be backend specific.
return self.cursor.execute(sql)
else:
> return self.cursor.execute(sql, params)
E psycopg2.errors.SyntaxError: syntax error at or near "."
E LINE 1: CREATE INDEX "source"."mymodel_geometry_id" ON
"sour...
E ^

}}}

Currently, the code that generates the name is here:
https://github.com/django/django/blob/65a9d0013d202447dd76a9cb3c939aa5c9d23da3/django/contrib/gis/db/backends/postgis/schema.py#L35-L38
{{{
if kwargs.get('name') is None:
index_name = '%s_%s_id' % (model._meta.db_table, field.column)
else:
index_name = kwargs['name']
}}}

This produces the index name (as seen in the error above):
source"."mymodel_geometry_id

We have been patching this internally with this code instead:
{{{
name = kwargs.get("name")
if name is None:
name = self._create_index_name(
table, [field.column], kwargs.get("suffix", "")
)
}}}

This makes the name something like:
mymodel_geometry_26ff3048

Is this a patch you would like to see? Or do you have a different
recommended solution?

--
Ticket URL: <https://code.djangoproject.com/ticket/32721>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
May 6, 2021, 12:08:37 PM5/6/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
------------------------------+--------------------------------------

Reporter: Alan D. Snow | Owner: nobody
Type: Bug | Status: new
Component: GIS | Version: 3.2
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+--------------------------------------
Description changed by Alan D. Snow:

Old description:

New description:

}}}

model._meta.db_table, [field.column], kwargs.get("suffix",
"")
)
}}}

This makes the name something like:
mymodel_geometry_26ff3048

Is this a patch you would like to see? Or do you have a different
recommended solution?

--

--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:1>

Django

unread,
May 6, 2021, 12:22:16 PM5/6/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
------------------------------+------------------------------------

Reporter: Alan D. Snow | Owner: nobody
Type: Bug | Status: new
Component: GIS | Version: 3.2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+------------------------------------
Changes (by Mariusz Felisiak):

* stage: Unreviewed => Accepted


Comment:

Thanks it looks valid, we should use the `_create_index_name()` hook
instead, e.g. `self._create_index_name(model._meta.db_table,
[field.column], suffix='_id')`. Would you like to prepare a patch? (tests
are required).

--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:2>

Django

unread,
May 6, 2021, 1:03:29 PM5/6/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
------------------------------+----------------------------------------
Reporter: Alan D. Snow | Owner: Alan D. Snow
Type: Bug | Status: assigned
Component: GIS | Version: 3.2

Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+----------------------------------------
Changes (by Alan D. Snow):

* owner: nobody => Alan D. Snow
* status: new => assigned
* has_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:3>

Django

unread,
May 6, 2021, 1:04:07 PM5/6/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
------------------------------+----------------------------------------
Reporter: Alan D. Snow | Owner: Alan D. Snow
Type: Bug | Status: assigned
Component: GIS | Version: 3.2

Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+----------------------------------------

Comment (by Alan D. Snow):

Happy to submit a patch. Ref: https://github.com/django/django/pull/14364

--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:4>

Django

unread,
May 7, 2021, 12:25:11 AM5/7/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
------------------------------+----------------------------------------
Reporter: Alan D. Snow | Owner: Alan D. Snow
Type: Bug | Status: assigned
Component: GIS | Version: 3.2

Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
------------------------------+----------------------------------------
Changes (by Mariusz Felisiak):

* needs_better_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:5>

Django

unread,
May 13, 2021, 7:10:23 AM5/13/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
-------------------------------------+-------------------------------------

Reporter: Alan D. Snow | Owner: Alan D.
| Snow
Type: Bug | Status: assigned
Component: GIS | Version: 3.2
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* needs_better_patch: 1 => 0
* stage: Accepted => Ready for checkin


--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:6>

Django

unread,
May 14, 2021, 1:40:22 AM5/14/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
-------------------------------------+-------------------------------------
Reporter: Alan D. Snow | Owner: Alan D.
| Snow
Type: Bug | Status: closed
Component: GIS | Version: 3.2
Severity: Normal | Resolution: fixed

Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak <felisiak.mariusz@…>):

* status: assigned => closed
* resolution: => fixed


Comment:

In [changeset:"29345aecf6e8d53ccb3577a3762bb0c263f7558d" 29345aec]:
{{{
#!CommitTicketReference repository=""
revision="29345aecf6e8d53ccb3577a3762bb0c263f7558d"
Fixed #32721 -- Fixed migrations crash when adding namespaced spatial
indexes on PostGIS.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:8>

Django

unread,
May 14, 2021, 1:40:22 AM5/14/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
-------------------------------------+-------------------------------------
Reporter: Alan D. Snow | Owner: Alan D.
| Snow
Type: Bug | Status: assigned
Component: GIS | Version: 3.2
Severity: Normal | Resolution:

Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Mariusz Felisiak <felisiak.mariusz@…>):

In [changeset:"99bc67a9e79256d8a2fcd5742e33a5e79c056539" 99bc67a]:
{{{
#!CommitTicketReference repository=""
revision="99bc67a9e79256d8a2fcd5742e33a5e79c056539"
Refs #32721 -- Made PostGISSchemaEditor._create_index_sql() call
super()._create_index_sql().
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:7>

Django

unread,
Nov 15, 2021, 7:55:24 PM11/15/21
to django-...@googlegroups.com
#32721: Geometry Index with PostGIS using schema
-------------------------------------+-------------------------------------
Reporter: Alan D. Snow | Owner: Alan D.
| Snow
Type: Bug | Status: closed
Component: GIS | Version: 3.2
Severity: Normal | Resolution: fixed

Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Tim Graham):

The first commit here makes the GIST_GEOMETRY_OPS_ND opclass disappear
from the creation of PostGIS's 3D geometry indexes (#33294).

--
Ticket URL: <https://code.djangoproject.com/ticket/32721#comment:9>

Reply all
Reply to author
Forward
0 new messages