2

I want to load a PostGIS layer to QGIS canvas. I am using the following code but it is not loading the layer in canvas.

sql = "(SELECT * FROM table WHERE id = 20)"
uri = QgsDataSourceURI()
uri.setConnection("host", "5432", "databasename", "user", "password")
uri.setDataSource("public","table", "the_geom", sql,"gid")
print uri.uri()
vlayer = QgsVectorLayer(uri.uri(), "test", "postgres")
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
canvas.refresh()

But the layer is not loaded. I don't know what I am doing wrong here.

nmtoken
  • 13,355
  • 5
  • 38
  • 87
user99
  • 979
  • 2
  • 15
  • 36

1 Answers1

5

The sql-parameter is not what it sounds like. It only takes a where-clause, like 'id = 20' in your case. So try:

uri.setDataSource("public","table", "the_geom", 'id = 20',"gid")
Andreas Müller
  • 2,622
  • 13
  • 20