#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.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/051.bd55e6760c2c3fdfdbea97700c84a9e8%40djangoproject.com.

Reply via email to