Problem z przyciąganiem w edytowanych widokach POSTGIS - Wersja do druku +- Forum QGIS (http://forum.quantum-gis.pl) +-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html) +--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html) +--- Wątek: Problem z przyciąganiem w edytowanych widokach POSTGIS (/thread-1594.html) |
Problem z przyciąganiem w edytowanych widokach POSTGIS - xmaziax - 26-02-2018 Problem wygląda następująco. Mam zbudowaną tabelę w bazie danych Postgresql. Na niej zbudowałem widok, na widoku trigger + funkcję dla niego odpowiedzialne za edycję danych (insert/update/delete). Edycja danych w widoku działa prawidłowo, wszystkie operacje wykonują się poprawnie. Jest natomiast problem ze snapowaniem dla nowo powstałych elementów (nowo narysowanych lub tych powstałych przez podział już istniejących). Nie działa dla nich przyciąganie. Po ponownym odczycie widoku, można już się snapować do tych obiektów. Można "uwidocznić" obiekt dla przyciągania, gdy się go "poruszy" narzędziem do modyfikacji vertexów - wtedy obiekt staje się "snapowalny" Znalazłem podobny wątek ze zgłoszonym błędem dla tabeli Oracle'a edytowanej w QGis. https://issues.qgis.org/issues/12690 Sprawdziłem i przy bezpośredniej edycji tabeli Postgis, problem się nie pojawia - czyli to wina operacji na widokach.l Coś robię nie tak czy problem leży raczej po stronie QGis i należy zgłaszać błąd twórcom? Ktoś coś doradzi? Używam QGis 2.18.17, Postgresql 9.6, Postgis 2.3.3 Poniżej kod umożliwiający odtworzenie sytuacji. Kod: CREATE SEQUENCE public.testw_id_seq RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - xmaziax - 27-02-2018 W treści poprzedniego posta zabrakło kodu budującego widok Należy go odpalić przed budowa triggera RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - xmaziax - 27-02-2018 Nie mogę edytować ani usuwać swoich postów - stąd kolejne 2 posty. Kod: CREATE OR REPLACE VIEW public.v_testw_1 AS RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - andrus - 28-02-2018 Na postgresie się nie znam ale na innych silnikach sql trochę tak. Może intuicyjnie trafię Zmodyfikuj kod trigera. Zamiast: val = nextval('testw_id_seq'); insert into testw (id, atr1, atr2, geom ) VALUES (val, 1, NEW.atr2, NEW.geom); Zakoduj tak: insert into testw (atr1, atr2, geom ) VALUES (1, NEW.atr2, NEW.geom); Na kolumnie id masz default sekwencyjny - nie wiem czy przypadkiem postgres nie rezerwuje sobie sekwencji przed wywołaniem trigera. RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - xmaziax - 01-03-2018 Dzięki za sugestię, ale to raczej nie jest wina funkcji triggera. Przy insercie muszę wygenerować nowe id, bo ja działam na widokach. W przykładzie, widok założony jest na jednej tabeli, ale nieraz używam widoków na kilku tabelach i w przypadku zmian muszę oprogramować aktualizację w nich wszystkich. Dla tabeli z założoną wartością domyślną, sekwencją i PK (nie sprawdzałem czy wszystkie 3 wymienione są wymagane) nie ma potrzeby generowania id z poziomu triggera. Sprawdziłem te dane w QGis3 i tam nie ma tego problemu (ale są inne ) Niestety jest jeszcze za wcześnie na migrację do 3. RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - andrus - 01-03-2018 Pole id w tabeli (rzeczywistej) testw masz zadeklarowane w ten sposób : id integer NOT NULL DEFAULT nextval('testw_id_seq'::regclass), a więc w momencie insertu który nie specyfikuje wartości id (insert into testw (atr1, atr2, geom ) ...) wstawiany będzie default czyli kolejny numer z sekwencji, nie ma zupełnie potrzeby pobierać wartości sekwencji w trigerze. Ale nie znam się na Postgresie i jest tu jakiś niuans. RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - andrus - 01-03-2018 Dodam jeszcze że piszesz że problem jest tylko w momencie wstawiania nowego elementu (przy edycji jest ok). Czym się różni update od insertu w kodzie tego trigera - właśnie tą sekwencją. W zalinkowanym przez Ciebie podobnym błędzie też przyczyną była sekwencja. Sugeruję że warto sprawdzić może to jest to. RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - xmaziax - 02-03-2018 Sprawdzałem to już wcześniej - nie działa, ale dzięki za sugestie. Tak, problem jest przy wstawianiu nowego obiektu z poziomu widoku. Do momentu zapisu tego elementu - przyciąganie dla niego działa (to jest chyba tymczasowa geometria, a nie fizycznie obiekt w bazie). Po wciśnięciu przycisku zapisz (nawet bez kończenia edycji warstwy) - już nie można się do niego dosnapować. Jest dokładnie tak jak ktoś opisał we wstawionym przeze mnie linku, ale dotyczyło to tabeli Oracle'a. Zresztą z tego co widziałem, ten powyższy błąd wymagał jednak zmian w kodzie QGis'a, więc to problem raczej po stronie QGis. Żeby na warstwie widoku element był snapowalny, musi być już na warstwie w chwili podpięcia do Qgis'a lub musi być zmieniona jego geometria. Wystarczy zmodyfikować jeden vertex, przesunąć obiekt, a do tego snap nie jest potrzebny. Po takim zabiegu przyciąganie działa. RE: Problem z przyciąganiem w edytowanych widokach POSTGIS - xmaziax - 23-04-2018 Jak by kogoś to interesowało to w wersji 2.18.18 błąd został wyeliminowany. |