<div dir="ltr"><div>Per chiarezza quello descritto è il comportamento di QGIS non una mia catena di lavoro.</div><div><br></div><div><br></div>
<i>In pratica fondendo due linee di tipo LINESTRING che hanno un nodo in comune la catena di lavoro che risulta è: <br><br>BEGIN;<br>  DELETE delle 2 linee<br>COMMIT;<br><br>BEGIN;<br>   INSERT della nuova linea fusa.<br></i><div><i>COMMIT;</i></div><div><i><br></i></div><div><br></div>

</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno mer 29 gen 2020 alle ore 13:05 Stefano Romanelli <<a href="mailto:romanelli.stefano@gmail.com" target="_blank">romanelli.stefano@gmail.com</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Buongiorno lista,<br><br>volevo capire se il comportamento di QGIS descritto di seguito è corretto oppure se, come ritengo, possa trattarsi di bug.<br><br>Lavoro con tabelle PostgreSQL. Ho testato su QGIS 2.18 e 3.4<br><br>In pratica fondendo due linee di tipo LINESTRING che hanno un nodo in comune la catena di lavoro che risulta è: <br><br>BEGIN;<br>  DELETE delle 2 linee<br>COMMIT;<br><br>BEGIN;<br>   INSERT della nuova linea fusa.<br>COMMIT;<br><br>Se un campo alfanumerico della tabella della nuova linea unita non soddisfa condizioni imposte si genera un errore ma DOPO che il primo COMMIT è andato a buon fine. Nel caso in cui decida di non salvare le modifiche e chiudere l'editing le due linee risultano comunque eliminate. Quindi nonostante apparentemente non abbia fatto nessuna modifica (ho fatto start editing, mi ha dato errore, ho chiuso l'editing senza salvare) in realtà la mia tabella è cambiata (e non poco!).<br><br>Concettualmente mi parrebbe più opportuno:<br><br>BEGIN;<br>          DELETE delle 2 linee<br>        INSERT della nuova linea fusa.<br>COMMIT;<br><br>Se invece si riesce a sanare l'errore la fusione avviene con successo.<br><br>Di seguito una estrema semplificazione per riprodurre quanto sopra. In QGIS una volta in editing, selezionate le due linee, e usato "Fondi gli elementi selezionati" mettere un valore di b maggiore di a in "Fondi Attributi Elemento" e salvare. <br><br>Si genera l'errore "<br><br>Impossibile applicare le modifiche al vettore pippo<br><br>Errori: SUCCESSO: 2 elementi eliminati.<br>  ERRORE: 1 geometria non aggiunta.<br>  <br>  Errori della sorgente dati:<br>      Errore PostGIS nell'aggiunta delle geometrie: ERRORE:  pippo<br>    CONTEXT:  funzione PL/pgSQL pippo_elimina() riga 6 a RAISE<br>"<br><br>Quindi abbandonare le modifiche senza salvare<br><br>-------------------------------------------------------------------------------<br><br>CREATE TABLE <br>    pippo (<br>        gid serial PRIMARY KEY, <br>        a int, <br>        b int, <br>        geom geometry(LINESTRING, 3003)<br>    )<br>;<br><br>CREATE OR REPLACE FUNCTION pippo_elimina()<br> RETURNS trigger<br> LANGUAGE plpgsql<br>AS $function$<br><br>BEGIN<br>    IF NEW.a < NEW.b THEN<br>        RAISE EXCEPTION 'pippo';<br>    ELSE<br>        RETURN NEW;<br>    END IF;<br>END; $function$<br>;<br><br>CREATE TRIGGER<br>    pippo_before_insup<br>BEFORE INSERT OR UPDATE ON<br>    pippo<br>FOR EACH ROW EXECUTE PROCEDURE<br>    pippo_elimina()<br>;<br><br><br>INSERT INTO<br>    pippo (a,b,geom)<br>VALUES<br>    (10,5,'0102000020BB0B000003000000BFD7DF8507B039419768526EEF8E5241659D8450C7B2394154EC9CFCB58E52412B15FD791CB33941C40B94587D8E5241'),<br>    (15,12, '0102000020BB0B0000030000002B15FD791CB33941C40B94587D8E524185769A7466B639414213C1391D8F524169A67ACC3EB53941AB3EB0AB9A8E5241')<br>;<br><br><br></div>
</blockquote></div>