x

FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint


  1. FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · Wullimann (Gast) · 16.11.2015 17:50 · [flux]

    Liebe OSMmer,

    ich betreibe einen lokalen OSM Server. Ich möchte via `osmosis` einen Kartenausschnitt importieren. Folgende Schritte werden ausgeführt:

    Ausscheiden der Karte aus dem aktuellen Deutschland-Kartenmaterial (geofabrik Stand 16.11.2015)

    osmosis --rx enableDateParsing=no file=germany-latest.osm.bz2 --bb left=10.72 right=11.51 top=53.28 bottom=52.81 completeWays=yes completeRelations=yes --wx luechow.osm.bz2

    Leeren der Datenbank:

    osmosis --truncate-apidb host="127.0.0.1" database="osm" user="123" password="123" validateSchemaVersion="no"

    Einspielen der Daten:

    osmosis --read-xml luechow.osm.bz2 --write-apidb host="127.0.0.1" database="osm" user="123" password="123" validateSchemaVersion="no"

    Der Datenimport bricht allerdings mit der folgenden Meldung ab:

    Nov 16, 2015 5:30:40 PM org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskManager waitForCompletion
    SCHWERWIEGEND: Thread for task 1-read-xml failed
    org.openstreetmap.osmosis.core.OsmosisRuntimeException: Unable to load current nodes.
    at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.populateCurrentNodes(ApidbWriter.java:928)
    at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.populateCurrentTables(ApidbWriter.java:1029)
    at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.complete(ApidbWriter.java:1055)
    at org.openstreetmap.osmosis.xml.v0_6.XmlReader.run(XmlReader.java:110)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: org.postgresql.util.PSQLException: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint „current_nodes_pkey1“
    Detail: Schlüssel „(id)=(100)“ existiert bereits.
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:410)
    at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.populateCurrentNodes(ApidbWriter.java:925)
    ... 4 more

    Ich habe das extrahieren des Ausschnitts ja bereits mit der Option `completeRelations=yes` gemacht, damit es nicht zum Durchtrennen von Wegen kommt, die dann ungünstiger Weise zwei mal im Datenbestand vorhanden sein können. Kann mir jemand helfen, das Problem zu lösen?

    Danke!


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · wambacher (Gast) · 16.11.2015 18:37 · [flux]

      Wullimann wrote:

      Kann mir jemand helfen, das Problem zu lösen?

      Nö, das musst du schon selber machen
      ...
      ...
      ...
      indem du keine API-DB aufsetzt sondern eine "normale" DB. Die Api-DB ist dafür da, per OSM-Api "gefüttert" zu werden und nicht geeignet, per OSMOSIS modifiziert zu werden. Zudem ist die zu nichts nütze ausser die Exporte für die "normalen" DBs zu erstellen..

      Abhänging von dem, was du damit machen willst, entweder

      https://wiki.openstreetmap.org/wiki/Osm … _Schema.29
      https://wiki.openstreetmap.org/wiki/Osm … _Schema.29

      oder aber mit osm2pgsql https://wiki.openstreetmap.org/wiki/Osm2pgsql um eine zum Rendern per Mapnik geeignete DB aufzusetzen.

      90% oder mehr der lokalen Datenbanken sind vom osm2pgsql-Typ, die beiden Osmosis-Versionen sind sehr selten und eine API-DB ist extrem selten.

      Gruss
      walter


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · GeorgFausB (Gast) · 17.11.2015 10:42 · [flux]

      Moin Walter,

      ich bewundere Deine Kompetenz in Sachen Datenbank und freue mich immer wieder über Deine allgemeine Hilfsbereitschaft -
      aber wäre es nicht sinnvoller, erst einmal

      wambacher wrote:

      Abhänging von dem, was du damit machen willst

      zu klären, ob er vielleicht eine Api-DB z. B. zum zukünftigen Auswerten der Historie benötigt,

      bevor man ihm

      wambacher wrote:

      indem du keine API-DB aufsetzt sondern eine "normale" DB.

      vor den Latz knallt?

      Aktuelle Fragestellung ist doch, warum tauchen beim Schreiben in eine leere API-DB doppelte ID auf?
      D. h. es geht hier doch um die Vorbereitung der Eingangsdaten.

      Die Empfehlung, ob er je nach gewünschter Aufgabenstellung mit einem anderen Schema nicht glücklicher wird, sollte m. E. erst erfolgen, wenn seine Aufgabenstellung klarer ist.

      Gruß
      Georg


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · wambacher (Gast) · 17.11.2015 11:48 · [flux]

      GeorgFausB wrote:

      Aktuelle Fragestellung ist doch, warum tauchen beim Schreiben in eine leere API-DB doppelte ID auf?
      D. h. es geht hier doch um die Vorbereitung der Eingangsdaten.

      Die Empfehlung, ob er je nach gewünschter Aufgabenstellung mit einem anderen Schema nicht glücklicher wird, sollte m. E. erst erfolgen, wenn seine Aufgabenstellung klarer ist.

      Hi Georg,

      Ich bin mir ziemlich sicher, dass das mit dem API-Schema nicht der richtige Weg ist, habe aber meine Schlussfolgerungen wohl etwas zu konkret formuliert.

      Warten wir mal ab.

      Gruss
      walter


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · woodpeck (Gast) · 17.11.2015 14:13 · [flux]

      Ich kann bestätigen, dass dieser Fehler tatsächlich auftritt (habe es selber nachgestellt), obwohl im Eingabefile definitiv nur einmal ein Node mit der id=100 auftaucht. Woran es liegt - keine Ahnung.

      (Anmerkung - ich würde mit --read-pbf und --write-pbf arbeiten statt mit XML-Dateien. Ausserdem, wie Wambacher sagt - vorher sicher sein, dass APIDB wirklich das ist, was man will.)

      Bye
      Frederik


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · Wullimann (Gast) · 17.11.2015 21:13 · [flux]

      Hallo Zusammen!

      Ich habe eine Instanz der OSM-Website laufen. Das Datenbank-Schema wird durch die Rails-Migration bestimmt. Insofern gibt es da keine Alternativen. Mir ist bisher kein besserer Weg für die Erstbestückung der Datenbank mit osmosis über die api-db in den Sinn gekommen. Außerdem hatte ich bisher gar keine Probleme, zumal es nicht das erste Mal ist, daß ich eine lokale Datenbank über diesen Weg bestückt habe.

      • ratlos*

    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · wambacher (Gast) · 17.11.2015 21:54 · [flux]

      Wullimann wrote:

      Hallo Zusammen!

      Ich habe eine Instanz der OSM-Website laufen.

      Hätte ich jetzt nicht gedacht. Nun denn, das ist ja das Allerfeinste vom Feinen. 😉

      Das Datenbank-Schema wird durch die Rails-Migration bestimmt. Insofern gibt es da keine Alternativen. Mir ist bisher kein besserer Weg für die Erstbestückung der Datenbank mit osmosis über die api-db in den Sinn gekommen. Außerdem hatte ich bisher gar keine Probleme, zumal es nicht das erste Mal ist, daß ich eine lokale Datenbank über diesen Weg bestückt habe.

      • ratlos*

      Nicht nur du - allerdings muss ich mangels Erfahrung mit der api-db aussteigen. Frederik hat ja auch einige Probleme der selben Art entdeckt. Da er, bzw seine Firma GeoFabrik, diese Exporte ja zur Verfügung stellen, sehe ich das Ganze in guten Händen.

      Als nächstes würde ich einfach mal einen anderen Extrakt (irgend was Kleines wie Bremen, Berlin oder Saarland) nehmen und das nochmals kurz anlaufen lassen, ohne auch nur ein Bit an den Daten zu ändern. Und natürlich PBF, wie Frederik vorgeschlagen hatte.

      Gruss
      walter


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · mmd (Gast) · 17.11.2015 21:59 · [flux]

      Hallo,

      100 ist zufällig auch die Paketgröße beim API DB-Writer in osmosis: Link. Des weiteren gibt es dort einen Patch für ein One-Off-Problem: Link. Ist dieser Patch bei euch drin?

      Spaßeshalber würde ich den Wert mal hoch oder runtersetzen, neu kompilieren und dann nochmal testen. Wird dann ein anderer Knoten angemeckert, ist ziemlich klar, dass die Paketverarbeitung kaputt ist.

      Ansonsten auch ratlos.

      Gruß,
      mmd


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · Wullimann (Gast) · 17.11.2015 22:20 · [flux]

      So, Problem hat sich erledigt...

      Ich hatte ursprünglich das im Debian-Repository ausgelieferte osmosis mit der Version 0.40.1 verwendet. Nun habe ich die letzte stable 0.44.1 verwendet: siehe da, es hat geklappt! Der Hinweis von mmd hat mich drauf gebracht, mal die Version zu kontrollieren. Danke an mmd, aber auch an alle anderen!

      Gruß,
      MM


    • Re: FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint · wambacher (Gast) · 17.11.2015 23:24 · [flux]

      Wullimann wrote:

      So, Problem hat sich erledigt...

      Ich hatte ursprünglich das im Debian-Repository ausgelieferte osmosis mit der Version 0.40.1 verwendet. Nun habe ich die letzte stable 0.44.1 verwendet: siehe da, es hat geklappt! Der Hinweis von mmd hat mich drauf gebracht, mal die Version zu kontrollieren. Danke an mmd, aber auch an alle anderen!

      Puh, das war aber heftig.
      Gratuliere.

      Gruss
      walter