osm2pgsql meldet ERROR: duplicate key value

Hallo,

ich habe

osm2pgsql -U gisuser -S default.style -a -s spain-latest.osm.pbf

benutzt, um eine neue Karte meiner Datenbank hinzuzufügen. Neben Warnungen wie

NOTICE:  table "planet_osm_point_tmp" does not exist, skipping 

gab es am Ende die Meldung


Node stats: total(39898339), max(2439101115) in 878s
Way stats: total(2658316), max(235833779) in 4200s
Relation stats: total(56894), max(3173506) in 611s
Committing transaction for planet_osm_point
Committing transaction for planet_osm_line
Committing transaction for planet_osm_polygon
Committing transaction for planet_osm_roads
COPY_END for COPY planet_osm_rels FROM STDIN;
 failed: ERROR:  duplicate key value violates unique constraint "planet_osm_rels_pkey"
DETAIL:  Key (id)=(2063181) already exists.
CONTEXT:  COPY planet_osm_rels, line 41047: "2063181    0    0    {2147162,72825,26802,2133091,2147287,76274,60745,73447,48042,35065,26791,2332838,52831,1..."

Error occurred, cleaning up

Ich habe die Karte nun ohne -a eingelesen, wodurch aber meine alten Karten gelöscht wurden, die ich wieder haben will. Was tun?

Ich verwende osm2pgsql SVN version 0.80.0 (64bit) unter Ubuntu und openstreetmap-carto aus git.

Ich würde mal vermuten, daß das nicht so einfach geht, zwei Extrakte in die gleiche Datenbank zu laden. Du hast dann immer das Risiko, daß einzelne Objekte in beiden Extrakten vorkommen. Damit kann osm2pgsql nicht umgehen und will den Eintrag zweimal schreiben, was aber zu Konfikten führt, da der eindeutige Key (id) nicht mehr eindeutig ist.

Lade Dir am besten einen größeren Extrakt runter und schneide dann den Dich interessierenden Gesamtbereich aus. Das kannst Du dann importieren.

Die NOTICE-Meldungen sind OK. Da werden nur Tabellen erstellt, sofern nicht vorhanden, bzw. in Deinem Beispiel soll wohl eine temoräre Tabelle gelöscht bzw. geleert werden, die bei Dir aber gar nicht existiert.

Christian

Wie hast du denn das erste Extrakt in die Datenbank eingelesen? Eigentlich sollte es doch klappen, wenn du die Datenbank updatebar erstellt hast. Ich glaube dafür war ein Parameter --slim oder so vorgesehen.

Wie brogo bereits geschrieben hat, ist das Laden mehrerer Extrakt derzeit mit osm2pgsql nicht wirklich moeglich. Das heist man muss immer den gesammten gewuenschten Bereich in einer Datei haben. Wenn es keine entsprechenden vorgefertigten Extrakte gibt kann man einen passenden Extrakt entweder aus einem groesseren ausschneiden, oder man fuegt mehrere Extrakte mit osmosis zu einem kombinierten zusammen befor man es mit osm2pgsql laedt.

Falls man keine Updates benoetigt und genuegend Ram hat (bzw die Extrakte klein genug sind), dann kann man das ganze auch im “non-slim” modus laden. Dort sollte das Laden mehrerer Extrakte funktionieren. Allerdings kann man dann eben keine updates mehr durchfuehren sondern muss wieder einen kompletten Neuimport durchfuehren um die Daten zu aktualisieren.

Angenommen, ich habe die Dateien land-a.osm.pbf und land-b.osm.pbf. Wie erzeuge ich daraus die Vereinigung der beiden Datensätze? Kann ich das Ergebnis dann mit osm2pgsql importieren oder erledigt osmosis das bereits?

Die Dokumentation unter http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage läßt viele Fragen offen.

Was ist da noch unklar? Zweimal --read-pbf mit den beiden Dateien, --merge und dann nach Wunsch weiter verarbeiten oder in eine Ausgabe schreiben.

obwohl oli-wan schon geantwortet hat:

  • benötigte PBF von der Geofabrik laden. Alle am gleichen Tag, damit die Randbereiche 100% zusammenpassen.
  • alle PBF mit osmosis oder osmconvert zu einem PBF mergen.
  • osm2pgsql benutzen.

Gruss
walter

Unklar ist:

  • Die Syntax des Befehls. In einer man-page gäbe es dazu den Abschnitt “Synopsis”.

  • Wie sortiert man einen Stream nach Typ und nach id.

Ferner scheint das Skript seine Bibliotheken nicht zu finden:


$ bin/osmosis --rb ~/Downloads/spain-latest.osm.pbf 
Sep 05, 2013 7:08:30 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.43.1
Sep 05, 2013 7:08:30 PM org.openstreetmap.osmosis.core.Osmosis main
SEVERE: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: Cannot load JPF-plugin 'org.mapsforge.MapFileWriter' for extensionpoint 'Task'

In readme.txt steht nichts darüber, ob und wie welche Pfade gesetzt werden müssen.

Sollte es jemals nötig sein: mit --sort. Die Daten von der Geofabrik oder jeder anderen vernünftigen Quelle sind aber bereits vorsortiert.

osmosis --read-pbf datei1.pbf --read-pbf datei2.pbf --merge --write-pbf zusammen.pbf

oder wahlweise statt des Schreibens sonstige Weiterverarbeitung.

sorry, das hast du was verbogen.
hier wird einzig und allein osmosis aufgerufen und der will plötzlich den mapsforge-Plugin? freiwillig macht osmosis das nicht. prüfe mal dein Umfeld.
da muß irgendwas von deinen älteren Versuchen (Environment?) hängen geblieben sein.

Gruss
walter

Ich habe Osmosis vorher noch nicht verwendet und keine Konfigurationsdatei von Osmosis verändert. Ein ~/.osmosis gibt es nicht. Ich erhalte immer wieder die gleiche Fehlermeldung, auch mit der von Oli-Wan angegebenen Syntax. Ich verwende Ubuntu 13.04.

Wo hast Du Dein osmosis denn her? Ein fertiges Paket genommen (könnte kaputt sein) oder gleich von Github? Letzteres habe ich gerade noch einmal ausprobiert (und bei der Gelegenheit mein altes osmosis mal wieder aktualisiert), läuft problemlos. Ist zwar ein Debian, aber daran sollte es beim Selbstgebauten nicht liegen.

Starte osmosis bitte mal nur mit der Option -v 2 also: bin/osmosis -v 2 und poste den Output.

hier der Output von meinem System:


walter@wno-server:/data/walter/osm/maven/DataServer$ /opt/install/osmosis-latest/bin/osmosis -v 2
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.42-6-gf39a160-dirty
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-pbf2-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.pbf2.PbfPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-set-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.set.SetPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-areafilter-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.areafilter.AreaFilterPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-xml-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.xml.XmlPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-pgsimple-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.pgsimple.PgSimplePluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-core-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.core.CorePluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-dataset-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.dataset.DatasetPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-replication-http-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.replicationhttp.ReplicationHttpPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-tagtransform-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.tagtransform.TransformPlugin.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-tagfilter-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.tagfilter.TagFilterPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-pbf-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader crosby.binary.osmosis.BinaryPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-replication-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.replication.ReplicationPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-apidb-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.apidb.ApidbPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin configuration file from url jar:file:/opt/install/osmosis-latest/lib/default/osmosis-pgsnapshot-0.43-RELEASE.jar!/osmosis-plugins.conf.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadBuiltInPlugins
FINER: Loading plugin via loader org.openstreetmap.osmosis.pgsnapshot.PgSnapshotPluginLoader.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadJPFPlugins
FINE: Searching for JPF plugins.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar gatherJpfPlugins
FINER: Loading plugins in /data/walter/osm/maven/DataServer/plugins
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar gatherJpfPlugins
FINER: Loading plugins in /home/walter/.openstreetmap/osmosis/plugins
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar gatherJpfPlugins
FINER: Loading plugins in /data/walter/osm/maven/DataServer/null/openstreetmap/osmosis/plugins
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar loadJPFPlugins
FINE: Registering the core plugin.
Sep 06, 2013 12:38:30 PM org.openstreetmap.osmosis.core.TaskRegistrar registerCorePlugin
FINEST: Plugin URL: jar:file:/opt/install/osmosis-latest/lib/default/osmosis-core-0.43-RELEASE.jar!/org/openstreetmap/osmosis/core/plugin/plugin.xml
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.TaskRegistrar loadJPFPlugins
FINE: Registering the extension plugins.
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.pipeline.common.Pipeline prepare
FINE: Building tasks.
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.pipeline.common.Pipeline prepare
FINE: Connecting tasks.
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Launching pipeline execution.
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline executing, waiting for completion.
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline complete.
Sep 06, 2013 12:38:31 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Total execution time: 458 milliseconds.
walter@wno-server:/data/walter/osm/maven/DataServer$ 

Gruss
walter

Ich habe den Link http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-latest.zip aus dem OSM-Wiki zur letzten stabilen Version verwendet und im Userspace entpackt.

Es crasht schon nach der Angabe der Version:


~/GPS/osmosis/bin$ ./osmosis -v
Sep 06, 2013 8:37:33 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.43.1
Sep 06, 2013 8:37:34 PM org.openstreetmap.osmosis.core.TaskRegistrar loadJPFPlugins
FINE: Searching for JPF plugins.
Sep 06, 2013 8:37:34 PM org.openstreetmap.osmosis.core.TaskRegistrar loadJPFPlugins
FINE: Registering the core plugin.
Sep 06, 2013 8:37:34 PM org.openstreetmap.osmosis.core.TaskRegistrar loadJPFPlugins
FINE: Registering the extension plugins.
Sep 06, 2013 8:37:34 PM org.openstreetmap.osmosis.core.TaskRegistrar loadJPFPlugins
FINE: Activating the plugins.
Sep 06, 2013 8:37:34 PM org.openstreetmap.osmosis.core.Osmosis main
SEVERE: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: Cannot load JPF-plugin 'org.mapsforge.MapFileWriter' for extensionpoint 'Task'
	at org.openstreetmap.osmosis.core.TaskRegistrar.loadJPFPlugins(TaskRegistrar.java:186)
	at org.openstreetmap.osmosis.core.TaskRegistrar.initialize(TaskRegistrar.java:88)
	at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:81)
	at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
	at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
Caused by: org.java.plugin.PluginLifecycleException: plug-in org.mapsforge.map.mapfile-writer requires plug-in org.openstreetmap.osmosis.core.plugin.Core which is unknown or has incompatible version
	at org.java.plugin.standard.StandardPluginManager.checkPrerequisites(StandardPluginManager.java:460)
	at org.java.plugin.standard.StandardPluginManager.activatePlugin(StandardPluginManager.java:397)
	at org.java.plugin.standard.StandardPluginManager.activatePlugin(StandardPluginManager.java:245)
	at org.openstreetmap.osmosis.core.TaskRegistrar.loadJPFPlugins(TaskRegistrar.java:182)
	... 12 more

Es gibt auch ein Paket für Ubuntu, aber das will 45 weitere Pakete installieren, was mir bei so einem kleinen Programm seltsam vorkommt.

Ich hatte ausdrücklich um -v 2 gebeten. Dass osmosis crasht, wissen wir schon lange - nur wo und warum?
Ich bin immer noch der Meinung, dass du irgendwo eine Einstellung hast (Environment, .osmosis, …), die ihn zwingt, den plugin zu laden.

was ist denn mit: “OSMOSIS_OPTIONS - The options to apply to all osmosis invocations, typically used to add plugins or make quiet operation the default.” ?
aus https://wiki.openstreetmap.org/wiki/Osmosis/Installation#Environment_variables_and_config_files

vergiss die, das Zeug ist total veraltet. bei Breth bist du schon richtig.

Dein Problem ist nicht, dass etwas fehlt (osmosis läuft auch ohne diesen bl… Plugin), sondern dass du irgendwo “sagst”, dass du ihn benutzen willst und er nicht da ist.

ansonsten:

Gruss
walter

Ich habe den Fehler gefunden: In einem Verzeichnis .openstreetmap gab es ein Unterverzeichnis mit dem map-writer-plugin. Nachdem ich das gelöscht habe, gibt es die Fehlermeldung nicht mehr. Danke Walter!

Beim Mergen der beiden Dateien meldet osmosis


WARNING: Attention: Data being output lacks metadata. Please use omitmetadata=true

Was bedeutet das?

Merkwürdig - nun denn, Schwamm drüber.

kennst du eigentlich das wiki? da steht alles drin: http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage

Gruss
walter

Was ich eigentlich wissen will, ist ob diese Warnung auf Probleme mit den Daten hinweist, die zu Schwierigkeiten mit anderen Programmen (wie osm2pgsql oder mapnik) führen können, oder ob ich die vorgeschlagene Option einfach hinzufügen soll.

Wenn der Output ohnehin keine Metadaten enthält, verstehe ich nicht, warum ich per Option angeben soll, daß der Output keine Metadaten enthalten soll.

Ich glaube nicht. Ich hab den auch abgeschaltet und danach keinerlei Probleme gehabt. Das ist ein Warning, das du abschalten könntest. Wieso/weshalb/warum? osmosis-dev fragen. da ist der Autor von osmosis aktiv.

Mir würde reichen, daß osmosis ohne Schnickschnack den speziellen Plugin schon mal läuft.
Jetzt könntest du ja gaaaanz langsam und vorsichtig versuchen, osmosis und den plugin zusammen zu bringen. Da muß ich aber wegen fehlender Praxis mit dem Plugin leider passen.

Wenn das dann mit EINEM Pbf-File läuft, nimst du 2 Pbf, vereinst die und machst damit weiter. Ich erwarte aber keine Probleme an dieser Stelle.

Gruss
walter

Auch wenn ich die Installation von Osmosis nur empfehlen kann, weil man es als Universal-Tool bestimmt irgendwann brauchen wird, ist osmconvert in diesem Fall nicht verkehrt, weil es einfacher zu “installieren” ist und etwas schneller läuft. Wambacher hat darauf ja schon hingewiesen:

Ein paar Sätze dazu stehen im OSM-Wiki:
https://wiki.openstreetmap.org/wiki/DE:Osmconvert#Zwei_oder_mehr_geographische_Bereiche_zusammenf.C3.BChren