kopia lustrzana https://github.com/openmaptiles/openmaptiles
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. pull/1295/head
rodzic
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;
|
||||
CREATE MATERIALIZED VIEW osm_park_polygon_dissolve_z4 AS
|
||||
(
|
||||
SELECT
|
||||
(ST_Dump(
|
||||
ST_Union(geometry))).geom AS geometry
|
||||
FROM osm_park_polygon_gen_z4
|
||||
SELECT min(osm_id) AS osm_id,
|
||||
ST_Union(geometry) AS geometry
|
||||
FROM (
|
||||
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_gen_z13;
|
||||
|
@ -95,7 +101,7 @@ BEGIN
|
|||
SET tags = update_tags(tags, geometry),
|
||||
geometry_point = st_centroid(geometry);
|
||||
|
||||
REFRESH MATERIALIZED VIEW osm_park_polygon_dissolve_z4;
|
||||
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_park_polygon_dissolve_z4;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue