Estoy intentando cargar una tabla postgres (columnas extraídas mediante una sentencia select) desde la consola de python en QGis:
Lo siguiente funciona bien y la capa se carga como se espera:
uri = QgsDataSourceURI()
uri.setConnection("*****","***","****","****","*****")
uri.setDataSource("","mytable","geom","","id")
vlayer = QgsVectorLayer(uri.uri(),"LayerName","postgres")
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
if not vlayer.isValid():
print "layer failed to load"
Sin embargo, si cambio el nombre de la tabla por una sentencia SQL select:
sql = "(select id from mytable)"
uri.setDataSource("",sql,"geom","","id")
vlayer = QgsVectorLayer(uri.uri(),"LayerName","postgres")
QgsMapLayerRegistry.instance().addMapLayer(vlayer)
if not vlayer.isValid():
print "layer failed to load"
Entonces la capa no se carga.
Además, si utilizo una sentencia SQL muy larga para intentar seleccionar más columnas, me aparece un mensaje en la ventana del terminal del tipo
AVISO: el identificador "(texto sql largo aquí)" se truncará a"
¿Me falta algo? Estoy utilizando QGis 2.4.