Implement non-blocking refresh (#1308)
This PR implements non-blocking updates in the park layer. The approach was to use the `REFRESH MATERIALIZED VIEW CONCURRENTLY` feature in postgres. In order to achieve this, a unique index was added on the z4 dissolved park area table. The `ST_Union` / `ST_Dump` sequence was changed to an explicit cluster DB scan (an equivalent operation) so that a unique osm ID could be generated from each dissolved polygon. Below is a screen shot from Idaho, USA showing that the dissolved z4 still works as expected. 
This commit is contained in:
parent
cdff735be1
commit
0cff3449b5
@ -23,11 +23,17 @@ ALTER TABLE osm_park_polygon_gen_z5
|
|||||||
DROP MATERIALIZED VIEW IF EXISTS osm_park_polygon_dissolve_z4 CASCADE;
|
DROP MATERIALIZED VIEW IF EXISTS osm_park_polygon_dissolve_z4 CASCADE;
|
||||||
CREATE MATERIALIZED VIEW osm_park_polygon_dissolve_z4 AS
|
CREATE MATERIALIZED VIEW osm_park_polygon_dissolve_z4 AS
|
||||||
(
|
(
|
||||||
SELECT
|
SELECT min(osm_id) AS osm_id,
|
||||||
(ST_Dump(
|
ST_Union(geometry) AS geometry
|
||||||
ST_Union(geometry))).geom AS geometry
|
FROM (
|
||||||
FROM osm_park_polygon_gen_z4
|
SELECT ST_ClusterDBSCAN(geometry, 0, 1) OVER() AS cluster,
|
||||||
|
osm_id,
|
||||||
|
geometry
|
||||||
|
FROM osm_park_polygon_gen_z4
|
||||||
|
) park_cluster
|
||||||
|
GROUP BY cluster
|
||||||
);
|
);
|
||||||
|
CREATE UNIQUE INDEX IF NOT EXISTS osm_park_polygon_dissolve_idx ON osm_park_polygon_dissolve_z4 (osm_id);
|
||||||
|
|
||||||
DROP TRIGGER IF EXISTS update_row ON osm_park_polygon;
|
DROP TRIGGER IF EXISTS update_row ON osm_park_polygon;
|
||||||
DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z13;
|
DROP TRIGGER IF EXISTS update_row ON osm_park_polygon_gen_z13;
|
||||||
@ -95,7 +101,7 @@ BEGIN
|
|||||||
SET tags = update_tags(tags, geometry),
|
SET tags = update_tags(tags, geometry),
|
||||||
geometry_point = st_centroid(geometry);
|
geometry_point = st_centroid(geometry);
|
||||||
|
|
||||||
REFRESH MATERIALIZED VIEW osm_park_polygon_dissolve_z4;
|
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_park_polygon_dissolve_z4;
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE plpgsql;
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user