7 votos

¿Cómo se cargan las capas desde postgres mediante una sentencia SELECT?

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.

2voto

Mattias Johansson Puntos 595

Te has perdido la geom en su consulta SQL.

Entonces, si reescribo el sql de la cadena a:

sql = "(select id, geom from mytable)"

a mí me funciona...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X