One way of doing this, is to use a window function and partition by geometry, so that each repeated geometry gets an id: 1, 2, 3, etc (or 1, 2) in your case, and then you just select from the table where the id = 1, to get a unique set of values (attributes and geometry) back, eg,
WITH unique_geoms (id, geom) as
(SELECT row_number() OVER (PARTITION BY ST_AsBinary(geom)) AS id, geom FROM some_table)
Obviously, you would need to add the other osm columns in the select too, this is just for illustration, but this is basically like grouping by geometry and just selecting the first instance of each one. Note, you need to use ST_AsBinary in the Partition By as otherwise the comparison is done on the bounding box, not the actual geometry.
As all the other attributes are presumably the same for each geometry pair, you would so something like this for all the other fields, including osm_id, and to actually create a new, unique table:
CREATE TABLE osm_unique AS
WITH unique_geoms (id, osm_id, attr1, attr2,... attrn, geom) AS
(SELECT row_number() OVER (PARTITION BY ST_AsBinary(geom)) AS id, osm_id, attr1, attr2,... attrn, geom
SELECT osm_id, attr1, attr2,... attrn, geom
This might be quicker than deleting from an existing table, especially if there are lots of indexes in place.
EDIT. Rewritten for readability, but, leaving the credit to dbaston for drawing my attention to ST_AsBinary(geom)