Wenn ich neue Elemente (Features) in eine andere Postgres-Ebene eingebe, kann ich dies auf zwei Arten tun:
- Zeichnen neuer Elemente (mit 'Feature hinzufügen'), die ich selten oder selten mache
- Kopieren (oder Ausschneiden) einiger Elemente aus einer anderen Postgre-Ebene (Quellenebene) und Einfügen in die Zielebene, was ich häufig mache
Im ersten Beispiel von Änderungen zu speichern funktioniert normal , da diese Schicht wird gid aus postgre Datenbanksequenz * nextval ( ‚layer_name_gid_seq‘ :: regclass) *
Im zweiten Beispiel ist beim Speichern von Änderungen ein Fehler aufgetreten, da beim Kopieren des Elements von der Quellenebene in die Zielebene qg die GID des Elements von der Quellenebene kopiert wird. Beim Versuch, Änderungen zu speichern, wird dieser Fehler zurückgegeben:
Änderungen an Layer „Cjevovodi“ konnten nicht festgeschrieben werden.
Fehler: FEHLER : 1 Feature (s) nicht hinzugefügt.
Anbieterfehler:
PostGIS-Fehler beim Hinzufügen von Funktionen: FEHLER: Doppelter Schlüsselwert verletzt eindeutige Einschränkung "cjevovodi_okill_pkey"
DETAIL: Schlüssel (gid) = (5) ist bereits vorhanden.
Ich habe versucht, * nextval ('layer_name_gid_seq' :: regclass) * in Feld gid zu kopieren, aber diese Sequenz kann nicht in Feld gid eingefügt werden, da das Feld als numerisch definiert ist.
Kennt jemand eine einfache Möglichkeit, Elemente aus der Quellenebene (mit vorhandener GID) zu kopieren und eine neue GID zuzuweisen?
Vielen Dank!
Antworten:
Ich kann dies in QGIS 2.2 Windows, c3a2817, nicht reproduzieren.
Wenn sich andere Versionen anders verhalten oder dieses Problem weiterhin besteht, können Sie wahrscheinlich einen PostgreSQL-Trigger für die Tabelle einrichten, um dies zu umgehen:
Verwenden Sie diese Beispieltabelle:
Hier ist eine Triggerfunktion, die
gid
bei Bedarf eine neue zuweist:Die Funktion an die Tabelle binden ...
Dadurch werden automatisch neue IDs zugewiesen, sofern diese
gid
bereits vorhanden sind. Beispielsweise dupliziert die folgende Abfrage jetzt alle Daten in der Tabelle, anstatt fehlzuschlagen:Natürlich kann dieser Ansatz die Absicht Ihres Primärschlüssels gefährden. Gehen Sie daher vorsichtig damit um.
quelle
Wählen Sie Features aus der Quellenebene aus und speichern Sie die ausgewählten (Speichern ausgewählt als ...) im Shapefile. Fügen Sie ein gespeichertes Shapefile in das QGIS-Projekt ein und öffnen Sie die Attributtabelle. Löschen Sie dann das Feld "gid" und speichern Sie das Shapefile. Wählen Sie Features in Shapefile aus und kopieren Sie sie in Ihre Arbeitsebene.
quelle