osmosis
osmosis copied to clipboard
ERROR: duplicate key value violates unique constraint "way_tags_pkey" Detail: Key (way_id, version, k)=(1571192, 1, SEMANTIC) already exists
When I use osmosis to upload xml to postgre db. There is an error as the title described :
$ osmosis --read-xml file=tmp/tmp_upload_934962040 --write-apidb database=my_db host=mydb.com:5432 user=pguser password= validateSchemaVersion=no
Jun 11, 2021 6:55:06 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.48.3
Jun 11, 2021 6:55:06 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
Jun 11, 2021 6:55:06 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Launching pipeline execution.
Jun 11, 2021 6:55:06 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline executing, waiting for completion.
Jun 11, 2021 6:58:29 PM org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskManager waitForCompletion
SEVERE: Thread for task 1-read-xml failed
org.openstreetmap.osmosis.core.OsmosisRuntimeException: Unable to bulk insert way tags into the database.
at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.flushWayTags(ApidbWriter.java:777)
at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.addWayTags(ApidbWriter.java:1252)
at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.flushWays(ApidbWriter.java:724)
at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.process(ApidbWriter.java:1238)
at org.openstreetmap.osmosis.core.container.v0_6.WayContainer.process(WayContainer.java:58)
at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.process(ApidbWriter.java:1172)
at org.openstreetmap.osmosis.xml.v0_6.impl.WayElementProcessor.end(WayElementProcessor.java:117)
at org.openstreetmap.osmosis.xml.v0_6.impl.OsmHandler.endElement(OsmHandler.java:107)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at java.xml/javax.xml.parsers.SAXParser.parse(SAXParser.java:197)
at org.openstreetmap.osmosis.xml.v0_6.impl.BaseXMLReader.parseXML(BaseXMLReader.java:65)
at org.openstreetmap.osmosis.xml.v0_6.impl.BaseXMLReader.handleXML(BaseXMLReader.java:77)
at org.openstreetmap.osmosis.xml.v0_6.XmlReader.run(XmlReader.java:52)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "way_tags_pkey"
Detail: Key (way_id, version, k)=(1571192, 1, SEMANTIC) already exists.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2183)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:143)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:120)
at org.openstreetmap.osmosis.apidb.v0_6.ApidbWriter.flushWayTags(ApidbWriter.java:771)
... 22 more
Jun 11, 2021 6:58:29 PM org.openstreetmap.osmosis.core.Osmosis main
SEVERE: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: One or more tasks failed.
at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.waitForCompletion(Pipeline.java:146)
at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:92)
at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:330)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:238)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
What puzzled me is that way_id=1571192 do not exist in way_tags even after this error occurs.
Why?
my_db=> insert into way_tags(way_id,version,k,v) values(1571192, 1, 'SEMANTIC','');
INSERT 0 1
my_db=>
my_db=> insert into way_tags(way_id,version,k,v) values(1571192, 1, 'SEMANTIC','');
ERROR: duplicate key value violates unique constraint "way_tags_pkey"
DETAIL: Key (way_id, version, k)=(1571192, 1, SEMANTIC) already exists.
my_db=> \d way_tags;
Table "public.way_tags"
Column | Type | Collation | Nullable | Default
---------+-------------------+-----------+----------+---------
way_id | bigint | | not null | 0
k | character varying | | not null |
v | character varying | | not null |
version | bigint | | not null |
Indexes:
"way_tags_pkey" PRIMARY KEY, btree (way_id, version, k)
Foreign-key constraints:
"way_tags_id_fkey" FOREIGN KEY (way_id, version) REFERENCES ways(way_id, version)
Resolved! The reason is my data has two same tags "SEMANTIC".
<way id="1571192" version="1" timestamp="2021-06-11T06:39:00Z" uid="1" user="yxh" changeset="1">
<nd ref="1571188"/>
<nd ref="1571189"/>
<nd ref="1571190"/>
<nd ref="1571191"/>
<tag k="OBJECT_TYPE_NAME" v="RoadMark"/>
<tag k="SEMANTIC" v=""/>
<tag k="SUB_TYPE_NAME" v="GuideArrow"/>
<tag k="CONFIDENCE" v="1.0"/>
<tag k="name" v="RoadMarkId(557040077, 29076)"/>
<tag k="SEMANTIC" v="GoStraight"/>
</way>