diff --git a/django/contrib/gis/db/backends/postgis/introspection.py b/django/contrib/gis/db/backends/postgis/introspection.py index 9b4458efea..82455d4c18 100644 --- a/django/contrib/gis/db/backends/postgis/introspection.py +++ b/django/contrib/gis/db/backends/postgis/introspection.py @@ -2,10 +2,6 @@ from django.contrib.gis.gdal import OGRGeomType from django.db.backends.postgresql.introspection import DatabaseIntrospection -class GeoIntrospectionError(Exception): - pass - - class PostGISIntrospection(DatabaseIntrospection): # Reverse dictionary for PostGIS geometry types not populated until # introspection is actually performed. @@ -65,33 +61,22 @@ class PostGISIntrospection(DatabaseIntrospection): metadata tables to determine the geometry type. """ with self.connection.cursor() as cursor: - try: - # First seeing if this geometry column is in the `geometry_columns` - cursor.execute('SELECT "coord_dimension", "srid", "type" ' - 'FROM "geometry_columns" ' - 'WHERE "f_table_name"=%s AND "f_geometry_column"=%s', - (table_name, geo_col)) - row = cursor.fetchone() - if not row: - raise GeoIntrospectionError - except GeoIntrospectionError: - cursor.execute('SELECT "coord_dimension", "srid", "type" ' - 'FROM "geography_columns" ' - 'WHERE "f_table_name"=%s AND "f_geography_column"=%s', - (table_name, geo_col)) - row = cursor.fetchone() - + cursor.execute(""" + SELECT t.coord_dimension, t.srid, t.type FROM ( + SELECT * FROM geometry_columns + UNION ALL + SELECT * FROM geography_columns + ) AS t WHERE t.f_table_name = %s AND t.f_geometry_column = %s + """, (table_name, geo_col)) + row = cursor.fetchone() if not row: raise Exception('Could not find a geometry or geography column for "%s"."%s"' % (table_name, geo_col)) - + dim, srid, field_type = row # OGRGeomType does not require GDAL and makes it easy to convert # from OGC geom type name to Django field. - field_type = OGRGeomType(row[2]).django - + field_type = OGRGeomType(field_type).django # Getting any GeometryField keyword arguments that are not the default. - dim = row[0] - srid = row[1] field_params = {} if srid != 4326: field_params['srid'] = srid