bstroebl / xplanPostGIS

Implementation of German standard XPlanung for PostgreSQL/PostGIS
GNU General Public License v2.0
8 stars 7 forks source link

Massenbearbeitung und neue Objekte einfügen, PostGIS-Fehler #14

Open petershr01 opened 3 years ago

petershr01 commented 3 years ago

Wenn mehrere Objekte per 'Copy and Paste' in eine editierbare DB-Tabelle eingefügt werden, und auch wenn ich ein neues Flächenobjekt zeichne, kommt immer unten stehende Fehlermeldung (Beispiel, auch bei den anderen Layern, siehe Bild 1).

_Konnte Änderungen am Layer FP_GruenFlaeche (editierbar) nicht festschreiben

Fehler: FEHLER: 39 Objekte nicht hinzugefügt. Datenanbieterfehler: PostGIS-Fehler beim Attributhinzufügen: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint »FP_Gruen_pkey« DETAIL: Schlüssel »(gid)=(2)« existiert bereits. CONTEXT: SQL-Anweisung »INSERT INTO "FP_Landwirtschaft_Wald_und_Gruen"."FP_Gruen"(gid) VALUES(2);« PL/pgSQL-Funktion "XP_Basisobjekte"."child_of_XPObjekt"() Zeile 43 bei EXECUTE

Meine derzeitige Umgehungslösung, bei einem Objekt wird "händisch" die nächst höchste ID eingetragen, dann wird die Einarbeitung gespeichert. Ich weiß, so arbeitet man nicht mit Daten in einer DB.

Ist das Einfügen von Objekten per 'Copy and Paste' generell möglich? Für die Übertragung des derzeitigen Bestandes aus einer ORACLE-DB, ist das aber ein schneller Weg.

Ist ggf. die Datenbank nicht richtig eingerichtet, habe jetzt schon mehrfach die SQL-Dateien für das Anlegen einer XPlan-DB verwendet. Dabei sind auch nie Fehlermeldungen gekommen. Aber die automatische Generierung die 'gid' funktioniert ja scheinbar nicht.

Bild image

image

Vielen Dank für Ihre Bemühungen.

bstroebl commented 3 years ago

Guten Morgen, versuchen Sie doch mal ohne Nicht-Leerbeschränkung erzwingen. Das wirkt sich aber nur auf die QGIS-eigene Datenmaske aus. Bei mir sind die Einstellungen allerdings gleich und es geht. IMHO sind zwei Fragen noch unbeantwortet: Warum zieht sich QGIS Werte aus der Sequenz und warum schlägt der Trigger bei Ihnen nur dann zu, wenn die gid beim Speichern NULL ist? Beides lässt sich aber von hier aus nicht beantworten.

petershr01 commented 3 years ago

Das deaktivieren von 'Nicht-Leerbeschränkung erzwingen' hat keine Auswirkung, gleiches Verhalten.

petershr01 commented 3 years ago

Ich habe mal folgenden Versuch durchgeführt:

image

image

bstroebl commented 3 years ago

Eine Zuweisung der gid durch den Client (QGIS) ist nicht zielführend, weil

  1. die maximale gid im jeweiligen Layer nichts über die maximale gid in der DB (letztendlich in XP_Objekt) aussagt und
  2. damit selbst im Erfolgsfall die maximal vorhandene gid in der DB nicht mehr synchron mit der Sequenz ist
petershr01 commented 3 years ago

Sollte nur ein Test sein und hat ja auch nur wieder eine Fehlermeldung erzeugt. Ich hatte danach das Ganze mit diesem Eintrag durchgeführt: 'maximum("gid") + 2' Auch da gab es die gleiche Fehlermeldung, also "Schlüssel existiert bereits", obwohl ja die erste neue "gid" den Wert 3033 hatte aber der Aktuelle Wert nur 3032. Im Web habe ich Bug-Meldungen und Foreneinträge gefunden über diesen Fehler, allerdings sehr alte. Auch als QGIS Bugs, aber halt noch die 1er oder 2er Version. Da Sie diesen Fehler ja nicht haben, muss irgendetwas hier nicht richtig konfiguriert sein. ABER, wie ich ja schon w.o. schrieb, auf meinem Laptop habe ich das selbe Problem. Ich weiß jetzt nur nicht mehr welche PostgreSQL/PostGIS Version dort installiert ist. Ich denke wir belassen es erst einmal dabei, sollte es neue Erkenntnisse geben, können die ja hier eingetragen werden.