[QGIS-Developer] core API to fetch query output fields from SQL query?
Sandro Santilli
strk at kbt.io
Fri Jan 10 00:55:33 PST 2020
On Thu, Jan 09, 2020 at 05:52:16PM +0100, Alessandro Pasotti wrote:
> This works for me:
>
> vl = QgsVectorLayer( "dbname=qgis_tests host=localhost port=5432
> key='__rid__' user=ale table=\"(SELECT row_number() OVER () AS __rid__, *
> FROM (SELECT * FROM raster_columns) AS foo)\" schema=public", 'layer',
> 'postgres')
Ok, I've taken this path [1]. My mistake was using .setDataSource, which
insists in taking a geometry column name.
Of course, as expected, doing the QgsVectorLayer dance degrades
startup costs as very many vector layers will be created, and there's
a number of operations that are done by the PostgreSQL provider when
creating such layers (such as retrieving capabilities of the provider).
[1] xxxxx
> Also, the vector API uses an iterator, so chunk retrieval is definitely
> possible.
Uhm, this would be interesting, does the chunk retrieval depend on
key generated by "row_number" as well ? The only downsides I see with
using this approach would be:
1. The cost of creating a QgsVectorLayer
2. The need to provide a syntetic primary key
3. (not sure about this): the need to support non-SELECT statements
--strk;
More information about the QGIS-Developer
mailing list