<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace">Hey dear list,<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">I recently stumbled upon a strange behaviour of QGIS.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">With a simple point postgis layer.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">When making several edit on the layer, then saving the edits.<br></div><div class="gmail_default" style="font-family:monospace,monospace">All the edits are send one by one to the database (though in the same transaction).<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">It would hold much benefits to group those insert/update per table before sending it, and it may be easy to do.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">A pure SQL solution :  <br></div><div class="gmail_default" style="font-family:monospace,monospace">instead of doing for instance :<br>---------------------<br></div><div class="gmail_default" style="font-family:monospace,monospace">--adding stuff<br>INSERT INTO my_table (geom) VALUES ('POINT(1,2)');<br>INSERT INTO my_table (geom) VALUES ('POINT(3,4)');<br></div><div class="gmail_default" style="font-family:monospace,monospace">--updating stuff<br></div><div class="gmail_default" style="font-family:monospace,monospace">UPDATE my_table SET geom = 'POINT(5,6)' WHERE id = 1 ;<br>UPDATE my_table SET geom = 'POINT(7,8)' WHERE id = 2 ;<br></div><div class="gmail_default" style="font-family:monospace,monospace">--deleting stuff <br></div><div class="gmail_default" style="font-family:monospace,monospace">DELETE FROM my_table WHERE id = 3 ;<br>DELETE FROM my_table WHERE id = 4 ;<br>----------------------<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">We could do <br>----------------------<br></div><div class="gmail_default" style="font-family:monospace,monospace">WITH inserting AS (<br>    INSERT INTO my_table (geom) VALUES ('POINT(1,2)')<br>)<br>,to_update AS (<br></div><div class="gmail_default" style="font-family:monospace,monospace">    SELECT 1 AS id, 'POINT(5,6)' AS geom<br></div><div class="gmail_default" style="font-family:monospace,monospace">    UNION ALL<br></div><div class="gmail_default" style="font-family:monospace,monospace">    SELECT 2 , 'POINT(7,8)' <br></div><div class="gmail_default" style="font-family:monospace,monospace">)<br></div><div class="gmail_default" style="font-family:monospace,monospace">, updating AS (<br></div><div class="gmail_default" style="font-family:monospace,monospace">    UPDATE my_table SET geom = t_o.geom<br></div><div class="gmail_default" style="font-family:monospace,monospace">    FROM update AS t_o<br></div><div class="gmail_default" style="font-family:monospace,monospace">    WHERE <a href="http://my_table.id">my_table.id</a> = <a href="http://t_o.id">t_o.id</a><br></div><div class="gmail_default" style="font-family:monospace,monospace">    RETURNING 1<br></div><div class="gmail_default" style="font-family:monospace,monospace">)<br>, deleting AS (<br>    DELETE FROM my_table<br>    WHERE id = ANY (ARRAY[3,4]) <br>    RETURNING 1<br>)<br>SELECT 1<br>FROM deleting ;<br>--------------------<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br><br></div><div class="gmail_default" style="font-family:monospace,monospace">Speed may benefit from it, but much more important, all the action would be in one statement, which would permit to use STATEMENT TRIGGER in postgis database.<br><br></div><div class="gmail_default" style="font-family:monospace,monospace">Cheers,<br></div><div class="gmail_default" style="font-family:monospace,monospace">Rémi-C<br></div><div class="gmail_default" style="font-family:monospace,monospace"><br></div><div class="gmail_default" style="font-family:monospace,monospace"><br><br></div></div>