From 7bdf1ae409726c0d0bddee5128d5a4c7498f8ee8 Mon Sep 17 00:00:00 2001 From: benedikt-brandtner-bikemap Date: Tue, 21 Mar 2023 20:24:47 +0100 Subject: [PATCH] Improved update performance of housenumber layer (#1507) Improved update performance of housenumber layer - Refactored IDs to be unique in housenumber.osm_ids - Restricted updates to INSERT and UPDATE operations during housenumber.refresh - Added analyze statements before update queries during housenumber.refresh --- layers/housenumber/housenumber_centroid.sql | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/layers/housenumber/housenumber_centroid.sql b/layers/housenumber/housenumber_centroid.sql index 66db8a1f..425cd905 100644 --- a/layers/housenumber/housenumber_centroid.sql +++ b/layers/housenumber/housenumber_centroid.sql @@ -6,7 +6,7 @@ CREATE SCHEMA IF NOT EXISTS housenumber; CREATE TABLE IF NOT EXISTS housenumber.osm_ids ( - osm_id bigint + osm_id bigint PRIMARY KEY ); -- etldoc: osm_housenumber_point -> osm_housenumber_point @@ -41,11 +41,7 @@ SELECT convert_housenumber_point(true); CREATE OR REPLACE FUNCTION housenumber.store() RETURNS trigger AS $$ BEGIN - IF (tg_op = 'DELETE') THEN - INSERT INTO housenumber.osm_ids VALUES (OLD.osm_id); - ELSE - INSERT INTO housenumber.osm_ids VALUES (NEW.osm_id); - END IF; + INSERT INTO housenumber.osm_ids VALUES (NEW.osm_id) ON CONFLICT (osm_id) DO NOTHING; RETURN NULL; END; $$ LANGUAGE plpgsql; @@ -70,6 +66,11 @@ DECLARE t TIMESTAMP WITH TIME ZONE := clock_timestamp(); BEGIN RAISE LOG 'Refresh housenumber'; + + -- Analyze tracking and source tables before performing update + ANALYZE housenumber.osm_ids; + ANALYZE osm_housenumber_point; + PERFORM convert_housenumber_point(false); -- noinspection SqlWithoutWhere DELETE FROM housenumber.osm_ids; @@ -82,13 +83,13 @@ END; $$ LANGUAGE plpgsql; CREATE TRIGGER trigger_store - AFTER INSERT OR UPDATE OR DELETE + AFTER INSERT OR UPDATE ON osm_housenumber_point FOR EACH ROW EXECUTE PROCEDURE housenumber.store(); CREATE TRIGGER trigger_flag - AFTER INSERT OR UPDATE OR DELETE + AFTER INSERT OR UPDATE ON osm_housenumber_point FOR EACH STATEMENT EXECUTE PROCEDURE housenumber.flag();