]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-sql/functions/place_triggers.sql
update postcode in place if it already exists
[nominatim.git] / lib-sql / functions / place_triggers.sql
index 43bae85631b1cbffc5d003a9fecd7d354f7a6c14..1538921560eed9a1a8e8c4c7d446d6cb4f25b496 100644 (file)
@@ -95,10 +95,21 @@ BEGIN
     -- Pure postcodes are never queried from placex so we don't add them.
     -- location_postcodes is filled from the place table directly.
     IF NEW.class = 'place' AND NEW.type = 'postcode' THEN
-      -- Remove old placex entry if the type changed to postcode.
-      IF existingplacex.type IS NOT NULL AND existingplacex.type != 'postcode' THEN
-        DELETE FROM placex where osm_type = NEW.osm_type and osm_id = NEW.osm_id;
+      -- Remove old placex entry.
+      DELETE FROM placex where osm_type = NEW.osm_type and osm_id = NEW.osm_id;
+
+      IF existing.osm_type IS NOT NULL THEN
+        IF coalesce(existing.address, ''::hstore) != coalesce(NEW.address, ''::hstore)
+           OR existing.geometry::text != NEW.geometry::text
+        THEN
+
+          update place set address = NEW.address, geometry = NEW.geometry
+            where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class and type = NEW.type;
+        END IF;
+
+        RETURN NULL;
       END IF;
+
       RETURN NEW;
     END IF;