diff --git a/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py
index d834ac25fa3..66846256ad4 100644
--- a/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py
+++ b/python/plugins/db_manager/db_plugins/postgis/plugins/qgis_topoview/__init__.py
@@ -121,11 +121,12 @@ def run(item, action, mainwindow):
         face_extent = layerFaceMbr.extent()
 
         # face geometry
-        sql = u'SELECT face_id, topology.ST_GetFaceGeometry(%s,' \
+        sql = u'SELECT face_id, mbr, topology.ST_GetFaceGeometry(%s,' \
               'face_id)::geometry(polygon, %s) as geom ' \
               'FROM %s.face WHERE face_id > 0' % \
               (quoteStr(toponame), toposrid, quoteId(toponame))
         uri.setDataSource('', u'(%s\n)' % sql, 'geom', '', 'face_id')
+        uri.setParam('bbox', 'mbr')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.Polygon)
         layerFaceGeom = QgsVectorLayer(uri.uri(False), u'%s.face' % toponame, provider)
@@ -133,12 +134,13 @@ def run(item, action, mainwindow):
         layerFaceGeom.loadNamedStyle(os.path.join(template_dir, 'face.qml'))
 
         # face_seed
-        sql = u'SELECT face_id, ST_PointOnSurface(' \
+        sql = u'SELECT face_id, mbr, ST_PointOnSurface(' \
               'topology.ST_GetFaceGeometry(%s,' \
               'face_id))::geometry(point, %s) as geom ' \
               'FROM %s.face WHERE face_id > 0' % \
               (quoteStr(toponame), toposrid, quoteId(toponame))
         uri.setDataSource('', u'(%s)' % sql, 'geom', '', 'face_id')
+        uri.setParam('bbox', 'mbr')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.Point)
         layerFaceSeed = QgsVectorLayer(uri.uri(False), u'%s.face_seed' % toponame, provider)
@@ -151,6 +153,7 @@ def run(item, action, mainwindow):
 
         # node
         uri.setDataSource(toponame, 'node', 'geom', '', 'node_id')
+        uri.removeParam('bbox')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.Point)
         layerNode = QgsVectorLayer(uri.uri(False), u'%s.node' % toponame, provider)
@@ -161,6 +164,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'node', 'geom', '', 'node_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.Point)
+        uri.removeParam('bbox')
         layerNodeLabel = QgsVectorLayer(uri.uri(False), u'%s.node_id' % toponame, provider)
         layerNodeLabel.setExtent(node_extent)
         layerNodeLabel.loadNamedStyle(os.path.join(template_dir, 'node_label.qml'))
@@ -171,6 +175,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.LineString)
+        uri.removeParam('bbox')
         layerEdge = QgsVectorLayer(uri.uri(False), u'%s.edge' % toponame, provider)
         edge_extent = layerEdge.extent()
 
@@ -178,6 +183,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.LineString)
+        uri.removeParam('bbox')
         layerDirectedEdge = QgsVectorLayer(uri.uri(False), u'%s.directed_edge' % toponame, provider)
         layerDirectedEdge.setExtent(edge_extent)
         layerDirectedEdge.loadNamedStyle(os.path.join(template_dir, 'edge.qml'))
@@ -186,6 +192,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.LineString)
+        uri.removeParam('bbox')
         layerEdgeLabel = QgsVectorLayer(uri.uri(False), u'%s.edge_id' % toponame, provider)
         layerEdgeLabel.setExtent(edge_extent)
         layerEdgeLabel.loadNamedStyle(os.path.join(template_dir, 'edge_label.qml'))
@@ -194,6 +201,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.LineString)
+        uri.removeParam('bbox')
         layerFaceLeft = QgsVectorLayer(uri.uri(False), u'%s.face_left' % toponame, provider)
         layerFaceLeft.setExtent(edge_extent)
         layerFaceLeft.loadNamedStyle(os.path.join(template_dir, 'face_left.qml'))
@@ -202,6 +210,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.LineString)
+        uri.removeParam('bbox')
         layerFaceRight = QgsVectorLayer(uri.uri(False), u'%s.face_right' % toponame, provider)
         layerFaceRight.setExtent(edge_extent)
         layerFaceRight.loadNamedStyle(os.path.join(template_dir, 'face_right.qml'))
@@ -210,6 +219,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.LineString)
+        uri.removeParam('bbox')
         layerNextLeft = QgsVectorLayer(uri.uri(False), u'%s.next_left' % toponame, provider)
         layerNextLeft.setExtent(edge_extent)
         layerNextLeft.loadNamedStyle(os.path.join(template_dir, 'next_left.qml'))
@@ -218,6 +228,7 @@ def run(item, action, mainwindow):
         uri.setDataSource(toponame, 'edge_data', 'geom', '', 'edge_id')
         uri.setSrid(toposrid)
         uri.setWkbType(QgsWkbTypes.LineString)
+        uri.removeParam('bbox')
         layerNextRight = QgsVectorLayer(uri.uri(False), u'%s.next_right' % toponame, provider)
         layerNextRight.setExtent(edge_extent)
         layerNextRight.loadNamedStyle(os.path.join(template_dir, 'next_right.qml'))
diff --git a/src/providers/postgres/qgspostgresfeatureiterator.cpp b/src/providers/postgres/qgspostgresfeatureiterator.cpp
index 0c19a5d2393..e9d81b8aa0d 100644
--- a/src/providers/postgres/qgspostgresfeatureiterator.cpp
+++ b/src/providers/postgres/qgspostgresfeatureiterator.cpp
@@ -457,7 +457,7 @@ QString QgsPostgresFeatureIterator::whereClauseRect()
                         mSource->mSpatialColType == SctPcPatch;
 
   QString whereClause = QStringLiteral( "%1%2 && %3" )
-                        .arg( QgsPostgresConn::quotedIdentifier( mSource->mGeometryColumn ),
+                        .arg( QgsPostgresConn::quotedIdentifier( mSource->mBoundingBoxColumn ),
                               castToGeometry ? "::geometry" : "",
                               qBox );
 
@@ -857,6 +857,7 @@ void QgsPostgresFeatureIterator::getFeatureAttribute( int idx, QgsPostgresResult
 QgsPostgresFeatureSource::QgsPostgresFeatureSource( const QgsPostgresProvider *p )
   : mConnInfo( p->mUri.connectionInfo( false ) )
   , mGeometryColumn( p->mGeometryColumn )
+  , mBoundingBoxColumn( p->mBoundingBoxColumn )
   , mSqlWhereClause( p->filterWhereClause() )
   , mFields( p->mAttributeFields )
   , mSpatialColType( p->mSpatialColType )
diff --git a/src/providers/postgres/qgspostgresfeatureiterator.h b/src/providers/postgres/qgspostgresfeatureiterator.h
index baa4b6bb3a8..7d96b1681f9 100644
--- a/src/providers/postgres/qgspostgresfeatureiterator.h
+++ b/src/providers/postgres/qgspostgresfeatureiterator.h
@@ -39,6 +39,7 @@ class QgsPostgresFeatureSource : public QgsAbstractFeatureSource
     QString mConnInfo;
 
     QString mGeometryColumn;
+    QString mBoundingBoxColumn;
     QString mSqlWhereClause;
     QgsFields mFields;
     QgsPostgresGeometryColumnType mSpatialColType;
diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp
index fa7a5011991..56143719b8c 100644
--- a/src/providers/postgres/qgspostgresprovider.cpp
+++ b/src/providers/postgres/qgspostgresprovider.cpp
@@ -105,6 +105,11 @@ QgsPostgresProvider::QgsPostgresProvider( QString const &uri, const ProviderOpti
   mSchemaName = mUri.schema();
   mTableName = mUri.table();
   mGeometryColumn = mUri.geometryColumn();
+  mBoundingBoxColumn = mUri.param( "bbox" );
+  if ( mBoundingBoxColumn.isEmpty() )
+  {
+    mBoundingBoxColumn = mGeometryColumn;
+  }
   mSqlWhereClause = mUri.sql();
   mRequestedSrid = mUri.srid();
   mRequestedGeomType = mUri.wkbType();
diff --git a/src/providers/postgres/qgspostgresprovider.h b/src/providers/postgres/qgspostgresprovider.h
index 159d5ab491e..a2658a29187 100644
--- a/src/providers/postgres/qgspostgresprovider.h
+++ b/src/providers/postgres/qgspostgresprovider.h
@@ -381,6 +381,7 @@ class QgsPostgresProvider : public QgsVectorDataProvider
     QString mPrimaryKeyDefault;
 
     QString mGeometryColumn;          //!< Name of the geometry column
+    QString mBoundingBoxColumn;       //!< Name of the bounding box column
     mutable QgsRectangle mLayerExtent;        //!< Rectangle that contains the extent (bounding box) of the layer
 
     QgsWkbTypes::Type mDetectedGeomType = QgsWkbTypes::Unknown ;  //!< Geometry type detected in the database