Kiedy wprowadzam nowe elementy (funkcje) w innej warstwie Postgres, mogę to zrobić na dwa sposoby:
- Rysowanie nowych elementów (za pomocą funkcji „Dodaj funkcję”), które robię rzadko lub
- Kopiowanie (lub wycinanie) niektórych elementów z innej warstwy Postgre (warstwa źródłowa) i wklejanie do warstwy docelowej, co często robię
W pierwszym przykładzie zapisywanie zmian działa normalnie, ponieważ warstwa ta dostaje gid z sekwencji bazy danych postgre * nextval ('nazwa_warstwy_gid_seq' :: regclass) *
W drugim przykładzie wystąpił błąd podczas zapisywania edycji, ponieważ podczas kopiowania elementu z warstwy źródłowej na warstwę docelową qgis skopiował gid elementu z warstwy źródłowej. Podczas próby zapisania zmian zwracany jest ten błąd:
Nie można zatwierdzić zmian w warstwie „Cjevovodi”
Błędy: BŁĄD: nie dodano 1 funkcji.
Błędy dostawcy:
błąd PostGIS podczas dodawania funkcji: BŁĄD: zduplikowana wartość klucza narusza unikalne ograniczenie „cjevovodi_okill_pkey”
SZCZEGÓŁY: Klucz (gid) = (5) już istnieje.
Próbowałem skopiować * nextval ('layer_name_gid_seq' :: regclass) * w polu gid, ale tej sekwencji nie można wkleić w polu gid, ponieważ pole jest zdefiniowane jako numeryczne.
Czy ktoś zna prosty sposób kopiowania elementów z warstwy źródłowej (z istniejącym gid) przypisuje nowy gid?
Dzięki!
Odpowiedzi:
Nie jestem w stanie odtworzyć tego w systemie Windows QGIS 2.2, c3a2817.
Jeśli inne wersje zachowują się inaczej lub nadal występuje ten problem, prawdopodobnie możesz ustawić wyzwalacz PostgreSQL na stole jako obejście:
Korzystając z tej przykładowej tabeli:
Oto funkcja wyzwalacza, która przypisze nowy w
gid
razie potrzeby:Powiązanie funkcji z tabelą ...
Spowoduje to automatyczne przypisanie nowych identyfikatorów tam, gdzie
gid
już istnieje. Na przykład następujące zapytanie spowoduje teraz powielenie wszystkich danych w tabeli zamiast niepowodzenia:Oczywiście takie podejście może zagrozić intencji twojego klucza podstawowego, więc używaj go ostrożnie.
źródło
Wybierz obiekty z warstwy źródłowej i zapisz wybrane (Zapisz wybrane jako ...) w pliku kształtu. Dodaj zapisany plik shapefile do projektu QGIS i otwórz tabelę atrybutów, następnie usuń pole „gid” i zapisz plik shapefile. Wybierz funkcje w pliku kształtu i skopiuj je do warstwy roboczej.
źródło