[Qgis-developer] Post-processing queries on postgis layers (after insert/delete/update)

Olivier Dalang olivier.dalang at gmail.com
Wed Mar 18 10:40:20 PDT 2015


Hi !

Thanks for your answer. I tested in more details, and it works indeed on a
normal table.

But in my scenario, I am editing a view, using some triggers to make the
view editable.

Here's a simplified case, it consists of one table, one view, and triggers
to insert/update/delete the view.:

https://gist.github.com/olivierdalang/cad70df2d463d0b87566

When I insert something using this query manually :

INSERT INTO test_view (name) VALUES ('abc'),('def') RETURNING id


I get

id
> ---
> 7
> 8


So it seems my triggers are working correctly (note that one mustn't
forget RETURNING
id INTO NEW.id in the insert trigger, without it we can't get the id back),
and I was hoping that it would be transparent to QGIS.

But when testing in QGIS, I get no id for the view.

Here's how I test (in the python console) :

def test(layerID, addedFeatures):

    print( 'committedFeaturesAdded was triggered on layerID'+layerID )

    for feat in addedFeatures:

        print( 'testing id: %s' % str(feat.id()) )

        print( 'testing attributes: %s' % str(feat.attributes()) )


Then this to display output when news features are commited  (run this once
with the normal table selected, once with the view selected)

 iface.activeLayer().committedFeaturesAdded.connect( test )


Then, add some features on the *table*, when you commit, you get :

committedFeaturesAdded was triggered on layerIDtest20150318181848185
> testing id: 9
> testing attributes: [9, u'abc']
> testing id: 10

testing attributes: [10, u'def']


Then, add some features on the *view*, when you commit, you get :

committedFeaturesAdded was triggered on layerIDtest_view20150318181847398
> testing id: 0
> testing attributes: [NULL, u'abc']
> testing id: 0
> testing attributes: [NULL, u'def']


So the ID isn't set...

Am I doing something wrong ?
Or is QGIS using some other way to get back the ID of a new feature ? Any
idea of what that could be ?
I thought updatable views were more or less transparent to QGIS, and had
very good results with views up to now.


Best regards,

Olivier





2015-03-17 20:07 GMT+01:00 Jürgen E. <jef at norbit.de>:

> Hi Olivier,
>
> On Tue, 17. Mar 2015 at 18:08:18 +0100, Olivier Dalang wrote:
> > I'm able to run SQL queries after inserts using this signal :
> > QgsVectorLayer.committedFeaturesAdded(layerId, addedFeatures)
>
> > The problem is that the addedFeatures array contains the features in
> their
> > state BEFORE they were committed.
>
> Are you sure it is?  I didn't try, but the postgres provider already
> updates
> the feature ids of the features passed to QgsPostgresProvider::addFeatures
> and
> and emits those in committedFeaturesAdded afterwards when the commit is
> run.
>
>
> Jürgen
>
> --
> Jürgen E. Fischer           norBIT GmbH             Tel.
> +49-4931-918175-31
> Dipl.-Inf. (FH)             Rheinstraße 13          Fax.
> +49-4931-918175-50
> Software Engineer           D-26506 Norden
> http://www.norbit.de
> QGIS release manager (PSC)  Germany                    IRC: jef on FreeNode
>
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20150318/686ebc5c/attachment-0001.html>


More information about the Qgis-developer mailing list