From c64170d9bed9576b911130de9ee9d94b0ae69454 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Mon, 2 Jan 2017 18:31:17 -0500 Subject: [PATCH 01/22] Initial materialized views and triggers --- layers/transportation_name/merge_highways.sql | 39 ++++++++++++++----- layers/water_name/water_lakeline.sql | 21 ++++++++-- layers/water_name/water_point.sql | 21 ++++++++-- layers/waterway/merge_waterway.sql | 37 +++++++++++++----- 4 files changed, 90 insertions(+), 28 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index c834c17..18e92a9 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -1,16 +1,11 @@ -DROP TABLE IF EXISTS osm_transportation_name_linestring CASCADE; -DROP TABLE IF EXISTS osm_transportation_name_linestring_gen1 CASCADE; -DROP TABLE IF EXISTS osm_transportation_name_linestring_gen2 CASCADE; -DROP TABLE IF EXISTS osm_transportation_name_linestring_gen3 CASCADE; - -- Instead of using relations to find out the road names we -- stitch together the touching ways with the same name -- to allow for nice label rendering -- Because this works well for roads that do not have relations as well -- etldoc: osm_highway_linestring -> osm_transportation_name_linestring -CREATE TABLE IF NOT EXISTS osm_transportation_name_linestring AS ( +CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( SELECT (ST_Dump(geometry)).geom AS geometry, -- NOTE: The osm_id is no longer the original one which can make it difficult @@ -35,11 +30,10 @@ CREATE TABLE IF NOT EXISTS osm_transportation_name_linestring AS ( GROUP BY name, highway, ref ) AS highway_union ); - CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_geometry_idx ON osm_transportation_name_linestring USING gist(geometry); -- etldoc: osm_transportation_name_linestring -> osm_transportation_name_linestring_gen1 -CREATE TABLE IF NOT EXISTS osm_transportation_name_linestring_gen1 AS ( +CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen1 AS ( SELECT ST_Simplify(geometry, 50) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 8000 @@ -47,7 +41,7 @@ CREATE TABLE IF NOT EXISTS osm_transportation_name_linestring_gen1 AS ( CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen1_geometry_idx ON osm_transportation_name_linestring_gen1 USING gist(geometry); -- etldoc: osm_transportation_name_linestring_gen1 -> osm_transportation_name_linestring_gen2 -CREATE TABLE IF NOT EXISTS osm_transportation_name_linestring_gen2 AS ( +CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen2 AS ( SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring_gen1 WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 14000 @@ -55,9 +49,34 @@ CREATE TABLE IF NOT EXISTS osm_transportation_name_linestring_gen2 AS ( CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen2_geometry_idx ON osm_transportation_name_linestring_gen2 USING gist(geometry); -- etldoc: osm_transportation_name_linestring_gen2 -> osm_transportation_name_linestring_gen3 -CREATE TABLE IF NOT EXISTS osm_transportation_name_linestring_gen3 AS ( +CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS ( SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring_gen2 WHERE highway = 'motorway' AND ST_Length(geometry) > 20000 ); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx ON osm_transportation_name_linestring_gen3 USING gist(geometry); + +--- Triggers + +CREATE OR REPLACE FUNCTION refresh_osm_transportation_name_linestring() RETURNS trigger AS + $BODY$ + BEGIN + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1 CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2 CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3 CONCURRENTLY; + RETURN null; + END; + $BODY$ +language plpgsql + +CREATE TRIGGER trigger_refresh_osm_transportation_name_linestring + AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring + FOR EACH STATEMENT + EXECUTE PROCEDURE refresh_osm_transportation_name_linestring + + + + + + diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index 16522e8..7110a09 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -1,9 +1,7 @@ -DROP TABLE IF EXISTS osm_water_lakeline CASCADE; - -- etldoc: osm_water_polygon -> osm_water_lakeline -- etldoc: lake_centerline -> osm_water_lakeline -CREATE TABLE IF NOT EXISTS osm_water_lakeline AS ( +CREATE MATERIALIZED VIEW osm_water_lakeline AS ( SELECT wp.osm_id, ll.wkb_geometry AS geometry, name, name_en, ST_Area(wp.geometry) AS area @@ -11,5 +9,20 @@ CREATE TABLE IF NOT EXISTS osm_water_lakeline AS ( INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE wp.name <> '' ); - CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline USING gist(geometry); + +-- Triggers + +CREATE OR REPLACE FUNCTION refresh_osm_water_lakeline() RETURNS trigger AS + $BODY$ + BEGIN + REFRESH MATERIALIZED VIEW osm_water_lakeline CONCURRENTLY; + RETURN null; + END; + $BODY$ +language plpgsql + +CREATE TRIGGER trigger_refresh_osm_water_lakeline + AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon + FOR EACH STATEMENT + EXECUTE PROCEDURE refresh_osm_water_lakeline diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 498a6e8..495aeab 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -1,9 +1,7 @@ -DROP TABLE IF EXISTS osm_water_point CASCADE; - -- etldoc: osm_water_polygon -> osm_water_point -- etldoc: lake_centerline -> osm_water_point -CREATE TABLE IF NOT EXISTS osm_water_point AS ( +CREATE MATERIALIZED VIEW osm_water_point AS ( SELECT wp.osm_id, topoint(wp.geometry) AS geometry, wp.name, wp.name_en, ST_Area(wp.geometry) AS area @@ -11,5 +9,20 @@ CREATE TABLE IF NOT EXISTS osm_water_point AS ( LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE ll.osm_id IS NULL AND wp.name <> '' ); - CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry); + +-- Triggers + +CREATE OR REPLACE FUNCTION refresh_osm_water_point() RETURNS trigger AS + $BODY$ + BEGIN + REFRESH MATERIALIZED VIEW osm_water_point CONCURRENTLY; + RETURN null; + END; + $BODY$ +language plpgsql + +CREATE TRIGGER trigger_refresh_osm_water_point + AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon + FOR EACH STATEMENT + EXECUTE PROCEDURE refresh_osm_water_point diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 604e004..2d75f2c 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -1,15 +1,10 @@ -DROP TABLE IF EXISTS osm_important_waterway_linestring CASCADE; -DROP TABLE IF EXISTS osm_important_waterway_linestring_gen1 CASCADE; -DROP TABLE IF EXISTS osm_important_waterway_linestring_gen2 CASCADE; -DROP TABLE IF EXISTS osm_important_waterway_linestring_gen3 CASCADE; - -- We merge the waterways by name like the highways -- This helps to drop not important rivers (since they do not have a name) -- and also makes it possible to filter out too short rivers -- etldoc: osm_waterway_linestring -> osm_important_waterway_linestring -CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring AS ( +CREATE MATERIALIZED VIEW osm_important_waterway_linestring AS ( SELECT (ST_Dump(geometry)).geom AS geometry, name @@ -22,11 +17,10 @@ CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring AS ( GROUP BY name ) AS waterway_union ); - CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_geometry_idx ON osm_important_waterway_linestring USING gist(geometry); -- etldoc: osm_important_waterway_linestring -> osm_important_waterway_linestring_gen1 -CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen1 AS ( +CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen1 AS ( SELECT ST_Simplify(geometry, 60) AS geometry, name FROM osm_important_waterway_linestring WHERE ST_Length(geometry) > 1000 @@ -34,7 +28,7 @@ CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen1 AS ( CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen1_geometry_idx ON osm_important_waterway_linestring_gen1 USING gist(geometry); -- etldoc: osm_important_waterway_linestring_gen1 -> osm_important_waterway_linestring_gen2 -CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen2 AS ( +CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen2 AS ( SELECT ST_Simplify(geometry, 100) AS geometry, name FROM osm_important_waterway_linestring_gen1 WHERE ST_Length(geometry) > 4000 @@ -42,9 +36,32 @@ CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen2 AS ( CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen2_geometry_idx ON osm_important_waterway_linestring_gen2 USING gist(geometry); -- etldoc: osm_important_waterway_linestring_gen2 -> osm_important_waterway_linestring_gen3 -CREATE TABLE IF NOT EXISTS osm_important_waterway_linestring_gen3 AS ( +CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen3 AS ( SELECT ST_Simplify(geometry, 200) AS geometry, name FROM osm_important_waterway_linestring_gen2 WHERE ST_Length(geometry) > 8000 ); CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx ON osm_important_waterway_linestring_gen3 USING gist(geometry); + +--- Triggers + +CREATE OR REPLACE FUNCTION refresh_osm_important_waterway_linestring() RETURNS trigger AS + $BODY$ + BEGIN + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1 CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2 CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3 CONCURRENTLY; + RETURN null; + END; + $BODY$ +language plpgsql + +CREATE TRIGGER trigger_refresh_osm_important_waterway_linestring + AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring + FOR EACH STATEMENT + EXECUTE PROCEDURE refresh_osm_important_waterway_linestring + + + + From 53c29f65cd1c515c8fc8ce1b23ce29880fc68765 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Tue, 3 Jan 2017 23:21:52 -0500 Subject: [PATCH 02/22] fix semicolon --- layers/transportation_name/merge_highways.sql | 2 +- layers/water_name/water_lakeline.sql | 2 +- layers/water_name/water_point.sql | 2 +- layers/waterway/merge_waterway.sql | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 18e92a9..05fa64b 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -73,7 +73,7 @@ language plpgsql CREATE TRIGGER trigger_refresh_osm_transportation_name_linestring AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_transportation_name_linestring + EXECUTE PROCEDURE refresh_osm_transportation_name_linestring; diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index 7110a09..d9cc9d7 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -25,4 +25,4 @@ language plpgsql CREATE TRIGGER trigger_refresh_osm_water_lakeline AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_water_lakeline + EXECUTE PROCEDURE refresh_osm_water_lakeline; diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 495aeab..e23ea9a 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -25,4 +25,4 @@ language plpgsql CREATE TRIGGER trigger_refresh_osm_water_point AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_water_point + EXECUTE PROCEDURE refresh_osm_water_point; diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 2d75f2c..1c27559 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -60,7 +60,7 @@ language plpgsql CREATE TRIGGER trigger_refresh_osm_important_waterway_linestring AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_important_waterway_linestring + EXECUTE PROCEDURE refresh_osm_important_waterway_linestring; From 0c1da272947b51a70fc466dfaa5178632e567d9a Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Tue, 3 Jan 2017 23:35:39 -0500 Subject: [PATCH 03/22] Fix pile of syntax issues --- layers/transportation_name/merge_highways.sql | 12 ++++++------ layers/water_name/water_lakeline.sql | 6 +++--- layers/water_name/water_point.sql | 6 +++--- layers/waterway/merge_waterway.sql | 12 ++++++------ 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 05fa64b..76debce 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -61,19 +61,19 @@ CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx CREATE OR REPLACE FUNCTION refresh_osm_transportation_name_linestring() RETURNS trigger AS $BODY$ BEGIN - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring CONCURRENTLY; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1 CONCURRENTLY; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2 CONCURRENTLY; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3 CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3; RETURN null; END; $BODY$ -language plpgsql +language plpgsql; CREATE TRIGGER trigger_refresh_osm_transportation_name_linestring AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_transportation_name_linestring; + EXECUTE PROCEDURE refresh_osm_transportation_name_linestring(); diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index d9cc9d7..dcc96e9 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -16,13 +16,13 @@ CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline CREATE OR REPLACE FUNCTION refresh_osm_water_lakeline() RETURNS trigger AS $BODY$ BEGIN - REFRESH MATERIALIZED VIEW osm_water_lakeline CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_water_lakeline; RETURN null; END; $BODY$ -language plpgsql +language plpgsql; CREATE TRIGGER trigger_refresh_osm_water_lakeline AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_water_lakeline; + EXECUTE PROCEDURE refresh_osm_water_lakeline(); diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index e23ea9a..f736dc9 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -16,13 +16,13 @@ CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING CREATE OR REPLACE FUNCTION refresh_osm_water_point() RETURNS trigger AS $BODY$ BEGIN - REFRESH MATERIALIZED VIEW osm_water_point CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_water_point; RETURN null; END; $BODY$ -language plpgsql +language plpgsql; CREATE TRIGGER trigger_refresh_osm_water_point AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_water_point; + EXECUTE PROCEDURE refresh_osm_water_point(); diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 1c27559..7b3c5db 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -48,19 +48,19 @@ CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx O CREATE OR REPLACE FUNCTION refresh_osm_important_waterway_linestring() RETURNS trigger AS $BODY$ BEGIN - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring CONCURRENTLY; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1 CONCURRENTLY; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2 CONCURRENTLY; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3 CONCURRENTLY; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3; RETURN null; END; $BODY$ -language plpgsql +language plpgsql; CREATE TRIGGER trigger_refresh_osm_important_waterway_linestring AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_important_waterway_linestring; + EXECUTE PROCEDURE refresh_osm_important_waterway_linestring(); From 2ef6a19149c492fe29904c41899cc668b625bb73 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 01:03:00 -0500 Subject: [PATCH 04/22] when create materialized do so without data, better logging --- layers/transportation_name/merge_highways.sql | 9 +++++---- layers/water_name/water_lakeline.sql | 3 ++- layers/water_name/water_point.sql | 3 ++- layers/waterway/merge_waterway.sql | 9 +++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 76debce..59b75f8 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -29,7 +29,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( WHERE (name <> '' OR ref <> '') AND NULLIF(highway, '') IS NOT NULL GROUP BY name, highway, ref ) AS highway_union -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_geometry_idx ON osm_transportation_name_linestring USING gist(geometry); -- etldoc: osm_transportation_name_linestring -> osm_transportation_name_linestring_gen1 @@ -37,7 +37,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen1 AS ( SELECT ST_Simplify(geometry, 50) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 8000 -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen1_geometry_idx ON osm_transportation_name_linestring_gen1 USING gist(geometry); -- etldoc: osm_transportation_name_linestring_gen1 -> osm_transportation_name_linestring_gen2 @@ -45,7 +45,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen2 AS ( SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring_gen1 WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 14000 -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen2_geometry_idx ON osm_transportation_name_linestring_gen2 USING gist(geometry); -- etldoc: osm_transportation_name_linestring_gen2 -> osm_transportation_name_linestring_gen3 @@ -53,7 +53,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS ( SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring_gen2 WHERE highway = 'motorway' AND ST_Length(geometry) > 20000 -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx ON osm_transportation_name_linestring_gen3 USING gist(geometry); --- Triggers @@ -61,6 +61,7 @@ CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx CREATE OR REPLACE FUNCTION refresh_osm_transportation_name_linestring() RETURNS trigger AS $BODY$ BEGIN + RAISE LOG 'Refresh osm_highway_linestring based tables'; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2; diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index dcc96e9..bf45b89 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -8,7 +8,7 @@ CREATE MATERIALIZED VIEW osm_water_lakeline AS ( FROM osm_water_polygon AS wp INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE wp.name <> '' -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline USING gist(geometry); -- Triggers @@ -16,6 +16,7 @@ CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline CREATE OR REPLACE FUNCTION refresh_osm_water_lakeline() RETURNS trigger AS $BODY$ BEGIN + RAISE LOG 'Refresh osm_water_lakeline based tables'; REFRESH MATERIALIZED VIEW osm_water_lakeline; RETURN null; END; diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index f736dc9..4d84ae9 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -8,7 +8,7 @@ CREATE MATERIALIZED VIEW osm_water_point AS ( FROM osm_water_polygon AS wp LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE ll.osm_id IS NULL AND wp.name <> '' -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry); -- Triggers @@ -16,6 +16,7 @@ CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING CREATE OR REPLACE FUNCTION refresh_osm_water_point() RETURNS trigger AS $BODY$ BEGIN + RAISE LOG 'Refresh osm_water polygon based tables'; REFRESH MATERIALIZED VIEW osm_water_point; RETURN null; END; diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 7b3c5db..efb2d71 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -16,7 +16,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring AS ( WHERE name <> '' AND waterway = 'river' GROUP BY name ) AS waterway_union -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_geometry_idx ON osm_important_waterway_linestring USING gist(geometry); -- etldoc: osm_important_waterway_linestring -> osm_important_waterway_linestring_gen1 @@ -24,7 +24,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen1 AS ( SELECT ST_Simplify(geometry, 60) AS geometry, name FROM osm_important_waterway_linestring WHERE ST_Length(geometry) > 1000 -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen1_geometry_idx ON osm_important_waterway_linestring_gen1 USING gist(geometry); -- etldoc: osm_important_waterway_linestring_gen1 -> osm_important_waterway_linestring_gen2 @@ -32,7 +32,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen2 AS ( SELECT ST_Simplify(geometry, 100) AS geometry, name FROM osm_important_waterway_linestring_gen1 WHERE ST_Length(geometry) > 4000 -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen2_geometry_idx ON osm_important_waterway_linestring_gen2 USING gist(geometry); -- etldoc: osm_important_waterway_linestring_gen2 -> osm_important_waterway_linestring_gen3 @@ -40,7 +40,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen3 AS ( SELECT ST_Simplify(geometry, 200) AS geometry, name FROM osm_important_waterway_linestring_gen2 WHERE ST_Length(geometry) > 8000 -); +) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx ON osm_important_waterway_linestring_gen3 USING gist(geometry); --- Triggers @@ -48,6 +48,7 @@ CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx O CREATE OR REPLACE FUNCTION refresh_osm_important_waterway_linestring() RETURNS trigger AS $BODY$ BEGIN + RAISE LOG 'Refresh osm_waterway_linestring based tables'; REFRESH MATERIALIZED VIEW osm_important_waterway_linestring; REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1; REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2; From 3c4205055bd14a04fecde07825cb241963d19ed0 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 11:49:14 -0500 Subject: [PATCH 05/22] Refresh concurrently --- layers/transportation_name/merge_highways.sql | 8 ++++---- layers/water_name/water_lakeline.sql | 2 +- layers/water_name/water_point.sql | 2 +- layers/waterway/merge_waterway.sql | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 59b75f8..d2310d1 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -62,10 +62,10 @@ CREATE OR REPLACE FUNCTION refresh_osm_transportation_name_linestring() RETURNS $BODY$ BEGIN RAISE LOG 'Refresh osm_highway_linestring based tables'; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen1; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen2; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen3; RETURN null; END; $BODY$ diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index bf45b89..0d66c69 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -17,7 +17,7 @@ CREATE OR REPLACE FUNCTION refresh_osm_water_lakeline() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh osm_water_lakeline based tables'; - REFRESH MATERIALIZED VIEW osm_water_lakeline; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_lakeline; RETURN null; END; $BODY$ diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 4d84ae9..7c70f39 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -17,7 +17,7 @@ CREATE OR REPLACE FUNCTION refresh_osm_water_point() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh osm_water polygon based tables'; - REFRESH MATERIALIZED VIEW osm_water_point; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_point; RETURN null; END; $BODY$ diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index efb2d71..be2a602 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -49,10 +49,10 @@ CREATE OR REPLACE FUNCTION refresh_osm_important_waterway_linestring() RETURNS t $BODY$ BEGIN RAISE LOG 'Refresh osm_waterway_linestring based tables'; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen1; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen2; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen3; RETURN null; END; $BODY$ From 35a5ba1ade61ec53aed66771065dd80c774b9b9b Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 15:53:58 -0500 Subject: [PATCH 06/22] Lakelines refresh once at commit time. --- layers/water_name/water_lakeline.sql | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index 0d66c69..d122371 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -11,14 +11,23 @@ CREATE MATERIALIZED VIEW osm_water_lakeline AS ( ) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline USING gist(geometry); --- Triggers +-- Handle updates + +CREATE TABLE IF NOT EXISTS updates_osm_water_polygon(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION flag_update_osm_water_polygon() RETURNS trigger AS $$ +BEGIN + INSERT INTO updates_osm_water_polygon(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; CREATE OR REPLACE FUNCTION refresh_osm_water_lakeline() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh osm_water_lakeline based tables'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_lakeline; - RETURN null; + REFRESH MATERIALIZED VIEW osm_water_lakeline; + DELETE FROM updates_osm_water_polygon; + RETURN null; END; $BODY$ language plpgsql; @@ -26,4 +35,10 @@ language plpgsql; CREATE TRIGGER trigger_refresh_osm_water_lakeline AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT + EXECUTE PROCEDURE flag_update_osm_water_polygon(); + +CREATE CONSTRAINT TRIGGER commit_osm_water_polygon + AFTER INSERT ON updates_osm_water_polygon + INITIALLY DEFERRED + FOR EACH ROW EXECUTE PROCEDURE refresh_osm_water_lakeline(); From 2fd3be14037eeb17eded3f26c534a2785f890618 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 16:59:42 -0500 Subject: [PATCH 07/22] Use schemas to update on commit, untested --- layers/transportation_name/merge_highways.sql | 38 ++++++++++++++----- layers/water_name/water_lakeline.sql | 24 ++++++------ layers/water_name/water_point.sql | 31 +++++++++++---- layers/waterway/merge_waterway.sql | 38 +++++++++++++------ 4 files changed, 92 insertions(+), 39 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index d2310d1..2664db4 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -56,25 +56,43 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS ( ) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx ON osm_transportation_name_linestring_gen3 USING gist(geometry); ---- Triggers +-- Handle updates -CREATE OR REPLACE FUNCTION refresh_osm_transportation_name_linestring() RETURNS trigger AS +CREATE SCHEMA transportation_name; + +CREATE TABLE IF NOT EXISTS transportation_name.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION transportation_name.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO transportation_name.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION transportation_name.refresh() RETURNS trigger AS $BODY$ BEGIN - RAISE LOG 'Refresh osm_highway_linestring based tables'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen1; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen2; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen3; - RETURN null; + RAISE LOG 'Refresh transportation_name'; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3; + DELETE FROM transportation_name.updates; + RETURN null; END; $BODY$ language plpgsql; -CREATE TRIGGER trigger_refresh_osm_transportation_name_linestring +CREATE TRIGGER transportation_name.trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_transportation_name_linestring(); + EXECUTE PROCEDURE transportation_name.flag(); + +CREATE CONSTRAINT TRIGGER transportation_name.trigger_refresh + AFTER INSERT ON transportation_name.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE transportation_name.refresh(); + diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index d122371..b52355f 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -13,32 +13,34 @@ CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline -- Handle updates -CREATE TABLE IF NOT EXISTS updates_osm_water_polygon(id serial primary key, t text, unique (t)); -CREATE OR REPLACE FUNCTION flag_update_osm_water_polygon() RETURNS trigger AS $$ +CREATE SCHEMA water_lakeline; + +CREATE TABLE IF NOT EXISTS water_lakeline.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION water_lakeline.flag() RETURNS trigger AS $$ BEGIN - INSERT INTO updates_osm_water_polygon(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + INSERT INTO water_lakeline.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; RETURN null; END; $$ language plpgsql; -CREATE OR REPLACE FUNCTION refresh_osm_water_lakeline() RETURNS trigger AS +CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS $BODY$ BEGIN - RAISE LOG 'Refresh osm_water_lakeline based tables'; + RAISE LOG 'Refresh water_lakeline'; REFRESH MATERIALIZED VIEW osm_water_lakeline; - DELETE FROM updates_osm_water_polygon; + DELETE FROM water_lakeline.updates; RETURN null; END; $BODY$ language plpgsql; -CREATE TRIGGER trigger_refresh_osm_water_lakeline +CREATE TRIGGER water_lakeline.trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT - EXECUTE PROCEDURE flag_update_osm_water_polygon(); + EXECUTE PROCEDURE water_lakeline.flag(); -CREATE CONSTRAINT TRIGGER commit_osm_water_polygon - AFTER INSERT ON updates_osm_water_polygon +CREATE CONSTRAINT TRIGGER water_lakeline.trigger_refresh + AFTER INSERT ON water_lakeline.updates INITIALLY DEFERRED FOR EACH ROW - EXECUTE PROCEDURE refresh_osm_water_lakeline(); + EXECUTE PROCEDURE water_lakeline.refresh(); diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 7c70f39..c61d5a7 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -11,19 +11,36 @@ CREATE MATERIALIZED VIEW osm_water_point AS ( ) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry); --- Triggers +-- Handle updates -CREATE OR REPLACE FUNCTION refresh_osm_water_point() RETURNS trigger AS +CREATE SCHEMA water_name; + +CREATE TABLE IF NOT EXISTS water_name.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION water_name.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO water_name.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS $BODY$ BEGIN - RAISE LOG 'Refresh osm_water polygon based tables'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_point; - RETURN null; + RAISE LOG 'Refresh water_name'; + REFRESH MATERIALIZED VIEW osm_water_point; + DELETE FROM water_name.updates; + RETURN null; END; $BODY$ language plpgsql; -CREATE TRIGGER trigger_refresh_osm_water_point +CREATE TRIGGER water_name.trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_water_point(); + EXECUTE PROCEDURE water_name.flag(); + +CREATE CONSTRAINT TRIGGER water_name.trigger_refresh + AFTER INSERT ON water_name.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE water_name.refresh(); diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index be2a602..321fbf6 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -43,26 +43,42 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen3 AS ( ) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx ON osm_important_waterway_linestring_gen3 USING gist(geometry); ---- Triggers +-- Handle updates -CREATE OR REPLACE FUNCTION refresh_osm_important_waterway_linestring() RETURNS trigger AS +CREATE SCHEMA waterway; + +CREATE TABLE IF NOT EXISTS waterway.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION waterway.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO waterway.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS $BODY$ BEGIN - RAISE LOG 'Refresh osm_waterway_linestring based tables'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen1; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen2; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen3; - RETURN null; + RAISE LOG 'Refresh transportation_name'; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3; + DELETE FROM waterway.updates; + RETURN null; END; $BODY$ language plpgsql; -CREATE TRIGGER trigger_refresh_osm_important_waterway_linestring +CREATE TRIGGER waterway.trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring FOR EACH STATEMENT - EXECUTE PROCEDURE refresh_osm_important_waterway_linestring(); - + EXECUTE PROCEDURE waterway.flag(); + +CREATE CONSTRAINT TRIGGER waterway.trigger_refresh + AFTER INSERT ON waterway.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE waterway.refresh(); From b97e5ad9fbc63eacc8c1b3798a6e4980ca55dee1 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 17:40:52 -0500 Subject: [PATCH 08/22] Convert housenumber point conversion to function --- layers/housenumber/housenumber_centroid.sql | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/layers/housenumber/housenumber_centroid.sql b/layers/housenumber/housenumber_centroid.sql index 8a81d6a..101f701 100644 --- a/layers/housenumber/housenumber_centroid.sql +++ b/layers/housenumber/housenumber_centroid.sql @@ -1,4 +1,9 @@ -- etldoc: osm_housenumber_point -> osm_housenumber_point -UPDATE osm_housenumber_point SET geometry=topoint(geometry) -WHERE ST_GeometryType(geometry) <> 'ST_Point'; +CREATE FUNCTION convert_housenumber_point() RETURNS VOID AS $$ +BEGIN + UPDATE osm_housenumber_point SET geometry=topoint(geometry) WHERE ST_GeometryType(geometry) <> 'ST_Point'; +END; +$$ LANGUAGE plpgsql; + +SELECT convert_housenumber_point(); From f1ee63e4bb90cee9ea5eadd3ec79b53fdf27c926 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 17:42:05 -0500 Subject: [PATCH 09/22] poi topoint function --- layers/poi/poi_polygon_update.sql | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/layers/poi/poi_polygon_update.sql b/layers/poi/poi_polygon_update.sql index 1e5073d..2840f29 100644 --- a/layers/poi/poi_polygon_update.sql +++ b/layers/poi/poi_polygon_update.sql @@ -1,5 +1,11 @@ -- etldoc: osm_poi_polygon -> osm_poi_polygon -UPDATE osm_poi_polygon SET geometry=topoint(geometry) -WHERE ST_GeometryType(geometry) <> 'ST_Point'; -ANALYZE osm_poi_polygon; +CREATE FUNCTION convert_poi_point() RETURNS VOID AS $$ +BEGIN + UPDATE osm_poi_polygon SET geometry=topoint(geometry) WHERE ST_GeometryType(geometry) <> 'ST_Point'; + ANALYZE osm_poi_polygon; +END; +$$ LANGUAGE plpgsql; + +SELECT convert_poi_point(); + From 8b4777fd79d36eaba2844ae72ab166c23062f731 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 17:54:15 -0500 Subject: [PATCH 10/22] poi and housenumber triggers --- layers/housenumber/housenumber_centroid.sql | 34 +++++++++++++++++++++ layers/poi/poi_polygon_update.sql | 33 ++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/layers/housenumber/housenumber_centroid.sql b/layers/housenumber/housenumber_centroid.sql index 101f701..1d1cf83 100644 --- a/layers/housenumber/housenumber_centroid.sql +++ b/layers/housenumber/housenumber_centroid.sql @@ -7,3 +7,37 @@ END; $$ LANGUAGE plpgsql; SELECT convert_housenumber_point(); + +-- Handle updates + +CREATE SCHEMA housenumber; + +CREATE TABLE IF NOT EXISTS housenumber.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION housenumber.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO housenumber.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION housenumber.refresh() RETURNS trigger AS + $BODY$ + BEGIN + RAISE LOG 'Refresh housenumber'; + SELECT convert_housenumber_point(); + DELETE FROM housenumber.updates; + RETURN null; + END; + $BODY$ +language plpgsql; + +CREATE TRIGGER trigger_flag + AFTER INSERT OR UPDATE OR DELETE ON osm_housenumber_point + FOR EACH STATEMENT + EXECUTE PROCEDURE housenumber.flag(); + +CREATE CONSTRAINT TRIGGER trigger_refresh + AFTER INSERT ON housenumber.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE housenumber.refresh(); diff --git a/layers/poi/poi_polygon_update.sql b/layers/poi/poi_polygon_update.sql index 2840f29..51259e5 100644 --- a/layers/poi/poi_polygon_update.sql +++ b/layers/poi/poi_polygon_update.sql @@ -9,3 +9,36 @@ $$ LANGUAGE plpgsql; SELECT convert_poi_point(); +-- Handle updates + +CREATE SCHEMA poi; + +CREATE TABLE IF NOT EXISTS poi.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION poi.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO poi.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION poi.refresh() RETURNS trigger AS + $BODY$ + BEGIN + RAISE LOG 'Refresh poi'; + SELECT convert_poi_point(); + DELETE FROM poi.updates; + RETURN null; + END; + $BODY$ +language plpgsql; + +CREATE TRIGGER trigger_flag + AFTER INSERT OR UPDATE OR DELETE ON osm_poi_polygon + FOR EACH STATEMENT + EXECUTE PROCEDURE poi.flag(); + +CREATE CONSTRAINT TRIGGER trigger_refresh + AFTER INSERT ON poi.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE poi.refresh(); From c5d4c1ea805b003d9ae2bf0a8f8e5f96d1fbfedc Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 17:56:51 -0500 Subject: [PATCH 11/22] Fix the name of triggers, cannot be schema-qualified --- layers/transportation_name/merge_highways.sql | 13 +++---------- layers/water_name/water_lakeline.sql | 4 ++-- layers/water_name/water_point.sql | 4 ++-- layers/waterway/merge_waterway.sql | 4 ++-- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 2664db4..7a81a87 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -82,20 +82,13 @@ CREATE OR REPLACE FUNCTION transportation_name.refresh() RETURNS trigger AS $BODY$ language plpgsql; -CREATE TRIGGER transportation_name.trigger_flag +CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring FOR EACH STATEMENT EXECUTE PROCEDURE transportation_name.flag(); -CREATE CONSTRAINT TRIGGER transportation_name.trigger_refresh +CREATE CONSTRAINT TRIGGER trigger_refresh AFTER INSERT ON transportation_name.updates INITIALLY DEFERRED FOR EACH ROW - EXECUTE PROCEDURE transportation_name.refresh(); - - - - - - - + EXECUTE PROCEDURE transportation_name.refresh(); \ No newline at end of file diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index b52355f..fc776db 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -34,12 +34,12 @@ CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS $BODY$ language plpgsql; -CREATE TRIGGER water_lakeline.trigger_flag +CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT EXECUTE PROCEDURE water_lakeline.flag(); -CREATE CONSTRAINT TRIGGER water_lakeline.trigger_refresh +CREATE CONSTRAINT TRIGGER trigger_refresh AFTER INSERT ON water_lakeline.updates INITIALLY DEFERRED FOR EACH ROW diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index c61d5a7..f938b76 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -34,12 +34,12 @@ CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS $BODY$ language plpgsql; -CREATE TRIGGER water_name.trigger_flag +CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT EXECUTE PROCEDURE water_name.flag(); -CREATE CONSTRAINT TRIGGER water_name.trigger_refresh +CREATE CONSTRAINT TRIGGER trigger_refresh AFTER INSERT ON water_name.updates INITIALLY DEFERRED FOR EACH ROW diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 321fbf6..ec2628f 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -69,12 +69,12 @@ CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS $BODY$ language plpgsql; -CREATE TRIGGER waterway.trigger_flag +CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring FOR EACH STATEMENT EXECUTE PROCEDURE waterway.flag(); -CREATE CONSTRAINT TRIGGER waterway.trigger_refresh +CREATE CONSTRAINT TRIGGER trigger_refresh AFTER INSERT ON waterway.updates INITIALLY DEFERRED FOR EACH ROW From 9573aca4f2f509c5ff136398f962c98592a6ff67 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 4 Jan 2017 19:53:16 -0500 Subject: [PATCH 12/22] place island topoint function --- layers/place/island_polygon_update.sql | 44 ++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/layers/place/island_polygon_update.sql b/layers/place/island_polygon_update.sql index 7b5c44c..57cca41 100644 --- a/layers/place/island_polygon_update.sql +++ b/layers/place/island_polygon_update.sql @@ -1,5 +1,43 @@ -- etldoc: osm_island_polygon -> osm_island_polygon -UPDATE osm_island_polygon SET geometry=topoint(geometry) -WHERE ST_GeometryType(geometry) <> 'ST_Point'; +CREATE FUNCTION convert_island_polygon_point() RETURNS VOID AS $$ +BEGIN + UPDATE osm_island_polygon SET geometry=topoint(geometry) WHERE ST_GeometryType(geometry) <> 'ST_Point'; + ANALYZE osm_island_polygon; +END; +$$ LANGUAGE plpgsql; -ANALYZE osm_island_polygon; +SELECT convert_island_polygon_point(); + +-- Handle updates + +CREATE SCHEMA place_island; + +CREATE TABLE IF NOT EXISTS place_island.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION place_island.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO place_island.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION place_island.refresh() RETURNS trigger AS + $BODY$ + BEGIN + RAISE LOG 'Refresh place_island'; + SELECT convert_island_polygon_point(); + DELETE FROM place_island.updates; + RETURN null; + END; + $BODY$ +language plpgsql; + +CREATE TRIGGER trigger_flag + AFTER INSERT OR UPDATE OR DELETE ON osm_island_polygon + FOR EACH STATEMENT + EXECUTE PROCEDURE place_island.flag(); + +CREATE CONSTRAINT TRIGGER trigger_refresh + AFTER INSERT ON place_island.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE place_island.refresh(); From c5f05e7c3a156d2754d105308bcb7f974492ef02 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Thu, 5 Jan 2017 08:59:15 -0500 Subject: [PATCH 13/22] Functions and triggers for state, country and city ranks --- layers/place/merge_city_rank.sql | 105 ++++++++++++++++++++-------- layers/place/merge_country_rank.sql | 92 +++++++++++++++++------- layers/place/merge_state_rank.sql | 84 ++++++++++++++++------ 3 files changed, 204 insertions(+), 77 deletions(-) diff --git a/layers/place/merge_city_rank.sql b/layers/place/merge_city_rank.sql index 9c68a7e..78587ab 100644 --- a/layers/place/merge_city_rank.sql +++ b/layers/place/merge_city_rank.sql @@ -1,38 +1,81 @@ CREATE EXTENSION IF NOT EXISTS unaccent; --- Clear OSM key:rank ( https://github.com/openmaptiles/openmaptiles/issues/108 ) --- etldoc: osm_city_point -> osm_city_point -UPDATE osm_city_point AS osm SET "rank" = NULL WHERE "rank" IS NOT NULL; --- etldoc: ne_10m_populated_places -> osm_city_point --- etldoc: osm_city_point -> osm_city_point +CREATE FUNCTION update_osm_city_point() RETURNS VOID AS $$ +BEGIN -WITH important_city_point AS ( - SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank, ne.labelrank - FROM ne_10m_populated_places AS ne, osm_city_point AS osm - WHERE - ( - ne.name ILIKE osm.name OR - ne.name ILIKE osm.name_en OR - ne.namealt ILIKE osm.name OR - ne.namealt ILIKE osm.name_en OR - ne.meganame ILIKE osm.name OR - ne.meganame ILIKE osm.name_en OR - ne.gn_ascii ILIKE osm.name OR - ne.gn_ascii ILIKE osm.name_en OR - ne.nameascii ILIKE osm.name OR - ne.nameascii ILIKE osm.name_en OR - ne.name = unaccent(osm.name) - ) - AND osm.place IN ('city', 'town', 'village') - AND ST_DWithin(ne.geometry, osm.geometry, 50000) -) -UPDATE osm_city_point AS osm --- Move scalerank to range 1 to 10 and merge scalerank 5 with 6 since not enough cities --- are in the scalerank 5 bucket -SET "rank" = CASE WHEN scalerank <= 5 THEN scalerank + 1 ELSE scalerank END -FROM important_city_point AS ne -WHERE osm.osm_id = ne.osm_id; + -- Clear OSM key:rank ( https://github.com/openmaptiles/openmaptiles/issues/108 ) + -- etldoc: osm_city_point -> osm_city_point + UPDATE osm_city_point AS osm SET "rank" = NULL WHERE "rank" IS NOT NULL; + + -- etldoc: ne_10m_populated_places -> osm_city_point + -- etldoc: osm_city_point -> osm_city_point + + WITH important_city_point AS ( + SELECT osm.geometry, osm.osm_id, osm.name, osm.name_en, ne.scalerank, ne.labelrank + FROM ne_10m_populated_places AS ne, osm_city_point AS osm + WHERE + ( + ne.name ILIKE osm.name OR + ne.name ILIKE osm.name_en OR + ne.namealt ILIKE osm.name OR + ne.namealt ILIKE osm.name_en OR + ne.meganame ILIKE osm.name OR + ne.meganame ILIKE osm.name_en OR + ne.gn_ascii ILIKE osm.name OR + ne.gn_ascii ILIKE osm.name_en OR + ne.nameascii ILIKE osm.name OR + ne.nameascii ILIKE osm.name_en OR + ne.name = unaccent(osm.name) + ) + AND osm.place IN ('city', 'town', 'village') + AND ST_DWithin(ne.geometry, osm.geometry, 50000) + ) + UPDATE osm_city_point AS osm + -- Move scalerank to range 1 to 10 and merge scalerank 5 with 6 since not enough cities + -- are in the scalerank 5 bucket + SET "rank" = CASE WHEN scalerank <= 5 THEN scalerank + 1 ELSE scalerank END + FROM important_city_point AS ne + WHERE osm.osm_id = ne.osm_id; + +END; +$$ LANGUAGE plpgsql; + +SELECT update_osm_city_point(); CREATE INDEX IF NOT EXISTS osm_city_point_rank_idx ON osm_city_point("rank"); + +-- Handle updates + +CREATE SCHEMA place_city; + +CREATE TABLE IF NOT EXISTS place_city.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION place_city.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO place_city.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION place_city.refresh() RETURNS trigger AS + $BODY$ + BEGIN + RAISE LOG 'Refresh place_city rank'; + SELECT update_osm_city_point(); + DELETE FROM place_city.updates; + RETURN null; + END; + $BODY$ +language plpgsql; + +CREATE TRIGGER trigger_flag + AFTER INSERT OR UPDATE OR DELETE ON osm_city_point + FOR EACH STATEMENT + EXECUTE PROCEDURE place_city.flag(); + +CREATE CONSTRAINT TRIGGER trigger_refresh + AFTER INSERT ON place_city.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE place_city.refresh(); diff --git a/layers/place/merge_country_rank.sql b/layers/place/merge_country_rank.sql index f1489e3..95a164a 100644 --- a/layers/place/merge_country_rank.sql +++ b/layers/place/merge_country_rank.sql @@ -3,32 +3,74 @@ ALTER TABLE osm_country_point DROP CONSTRAINT IF EXISTS osm_country_point_rank_c -- etldoc: ne_10m_admin_0_countries -> osm_country_point -- etldoc: osm_country_point -> osm_country_point -WITH important_country_point AS ( - SELECT osm.geometry, osm.osm_id, osm.name, COALESCE(NULLIF(osm.name_en, ''), ne.name) AS name_en, ne.scalerank, ne.labelrank - FROM ne_10m_admin_0_countries AS ne, osm_country_point AS osm - WHERE - -- We only match whether the point is within the Natural Earth polygon - -- because name matching is to difficult since OSM does not contain good - -- enough coverage of ISO codesy - ST_Within(osm.geometry, ne.geometry) - -- We leave out tiny countries - AND ne.scalerank <= 1 -) -UPDATE osm_country_point AS osm --- Normalize both scalerank and labelrank into a ranking system from 1 to 6 --- where the ranks are still distributed uniform enough across all countries -SET "rank" = LEAST(6, CEILING((scalerank + labelrank)/2.0)) -FROM important_country_point AS ne -WHERE osm.osm_id = ne.osm_id; +CREATE FUNCTION update_osm_country_point() RETURNS VOID AS $$ +BEGIN -UPDATE osm_country_point AS osm -SET "rank" = 6 -WHERE "rank" IS NULL; + WITH important_country_point AS ( + SELECT osm.geometry, osm.osm_id, osm.name, COALESCE(NULLIF(osm.name_en, ''), ne.name) AS name_en, ne.scalerank, ne.labelrank + FROM ne_10m_admin_0_countries AS ne, osm_country_point AS osm + WHERE + -- We only match whether the point is within the Natural Earth polygon + -- because name matching is to difficult since OSM does not contain good + -- enough coverage of ISO codesy + ST_Within(osm.geometry, ne.geometry) + -- We leave out tiny countries + AND ne.scalerank <= 1 + ) + UPDATE osm_country_point AS osm + -- Normalize both scalerank and labelrank into a ranking system from 1 to 6 + -- where the ranks are still distributed uniform enough across all countries + SET "rank" = LEAST(6, CEILING((scalerank + labelrank)/2.0)) + FROM important_country_point AS ne + WHERE osm.osm_id = ne.osm_id; --- TODO: This shouldn't be necessary? The rank function makes something wrong... -UPDATE osm_country_point AS osm -SET "rank" = 1 -WHERE "rank" = 0; + UPDATE osm_country_point AS osm + SET "rank" = 6 + WHERE "rank" IS NULL; -ALTER TABLE osm_country_point ADD CONSTRAINT osm_country_point_rank_constraint CHECK("rank" BETWEEN 1 AND 6); + -- TODO: This shouldn't be necessary? The rank function makes something wrong... + UPDATE osm_country_point AS osm + SET "rank" = 1 + WHERE "rank" = 0; + +END; +$$ LANGUAGE plpgsql; + +SELECT update_osm_country_point(); + +-- ALTER TABLE osm_country_point ADD CONSTRAINT osm_country_point_rank_constraint CHECK("rank" BETWEEN 1 AND 6); CREATE INDEX IF NOT EXISTS osm_country_point_rank_idx ON osm_country_point("rank"); + +-- Handle updates + +CREATE SCHEMA place_country; + +CREATE TABLE IF NOT EXISTS place_country.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION place_country.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO place_country.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION place_country.refresh() RETURNS trigger AS + $BODY$ + BEGIN + RAISE LOG 'Refresh place_country rank'; + SELECT update_osm_country_point(); + DELETE FROM place_country.updates; + RETURN null; + END; + $BODY$ +language plpgsql; + +CREATE TRIGGER trigger_flag + AFTER INSERT OR UPDATE OR DELETE ON osm_country_point + FOR EACH STATEMENT + EXECUTE PROCEDURE place_country.flag(); + +CREATE CONSTRAINT TRIGGER trigger_refresh + AFTER INSERT ON place_country.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE place_country.refresh(); diff --git a/layers/place/merge_state_rank.sql b/layers/place/merge_state_rank.sql index 54e6803..d204a21 100644 --- a/layers/place/merge_state_rank.sql +++ b/layers/place/merge_state_rank.sql @@ -3,28 +3,70 @@ ALTER TABLE osm_state_point DROP CONSTRAINT IF EXISTS osm_state_point_rank_const -- etldoc: ne_10m_admin_1_states_provinces_shp -> osm_state_point -- etldoc: osm_state_point -> osm_state_point -WITH important_state_point AS ( - SELECT osm.geometry, osm.osm_id, osm.name, COALESCE(NULLIF(osm.name_en, ''), ne.name) AS name_en, ne.scalerank, ne.labelrank, ne.datarank - FROM ne_10m_admin_1_states_provinces_shp AS ne, osm_state_point AS osm - WHERE - -- We only match whether the point is within the Natural Earth polygon - -- because name matching is difficult - ST_Within(osm.geometry, ne.geometry) - -- We leave out leess important states - AND ne.scalerank <= 3 AND ne.labelrank <= 2 -) -UPDATE osm_state_point AS osm --- Normalize both scalerank and labelrank into a ranking system from 1 to 6. -SET "rank" = LEAST(6, CEILING((scalerank + labelrank + datarank)/3.0)) -FROM important_state_point AS ne -WHERE osm.osm_id = ne.osm_id; +CREATE FUNCTION update_osm_state_point() RETURNS VOID AS $$ +BEGIN --- TODO: This shouldn't be necessary? The rank function makes something wrong... -UPDATE osm_state_point AS osm -SET "rank" = 1 -WHERE "rank" = 0; + WITH important_state_point AS ( + SELECT osm.geometry, osm.osm_id, osm.name, COALESCE(NULLIF(osm.name_en, ''), ne.name) AS name_en, ne.scalerank, ne.labelrank, ne.datarank + FROM ne_10m_admin_1_states_provinces_shp AS ne, osm_state_point AS osm + WHERE + -- We only match whether the point is within the Natural Earth polygon + -- because name matching is difficult + ST_Within(osm.geometry, ne.geometry) + -- We leave out leess important states + AND ne.scalerank <= 3 AND ne.labelrank <= 2 + ) + UPDATE osm_state_point AS osm + -- Normalize both scalerank and labelrank into a ranking system from 1 to 6. + SET "rank" = LEAST(6, CEILING((scalerank + labelrank + datarank)/3.0)) + FROM important_state_point AS ne + WHERE osm.osm_id = ne.osm_id; -DELETE FROM osm_state_point WHERE "rank" IS NULL; + -- TODO: This shouldn't be necessary? The rank function makes something wrong... + UPDATE osm_state_point AS osm + SET "rank" = 1 + WHERE "rank" = 0; -ALTER TABLE osm_state_point ADD CONSTRAINT osm_state_point_rank_constraint CHECK("rank" BETWEEN 1 AND 6); + DELETE FROM osm_state_point WHERE "rank" IS NULL; + +END; +$$ LANGUAGE plpgsql; + +SELECT update_osm_state_point(); + +-- ALTER TABLE osm_state_point ADD CONSTRAINT osm_state_point_rank_constraint CHECK("rank" BETWEEN 1 AND 6); CREATE INDEX IF NOT EXISTS osm_state_point_rank_idx ON osm_state_point("rank"); + +-- Handle updates + +CREATE SCHEMA place_state; + +CREATE TABLE IF NOT EXISTS place_state.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION place_state.flag() RETURNS trigger AS $$ +BEGIN + INSERT INTO place_state.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + RETURN null; +END; +$$ language plpgsql; + +CREATE OR REPLACE FUNCTION place_state.refresh() RETURNS trigger AS + $BODY$ + BEGIN + RAISE LOG 'Refresh place_state rank'; + SELECT update_osm_state_point(); + DELETE FROM place_state.updates; + RETURN null; + END; + $BODY$ +language plpgsql; + +CREATE TRIGGER trigger_flag + AFTER INSERT OR UPDATE OR DELETE ON osm_state_point + FOR EACH STATEMENT + EXECUTE PROCEDURE place_state.flag(); + +CREATE CONSTRAINT TRIGGER trigger_refresh + AFTER INSERT ON place_state.updates + INITIALLY DEFERRED + FOR EACH ROW + EXECUTE PROCEDURE place_state.refresh(); From 9437a1b8d6635c7ac9d53452e74cd969977291e7 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Thu, 5 Jan 2017 12:47:10 -0500 Subject: [PATCH 14/22] Make the sql rerunnable without error --- layers/place/island_polygon_update.sql | 7 +++++-- layers/place/merge_city_rank.sql | 7 +++++-- layers/place/merge_country_rank.sql | 7 +++++-- layers/place/merge_state_rank.sql | 7 +++++-- layers/poi/poi_polygon_update.sql | 7 +++++-- layers/transportation_name/merge_highways.sql | 12 ++++++++++-- layers/water_name/water_lakeline.sql | 7 ++++++- layers/water_name/water_point.sql | 9 +++++++-- layers/waterway/merge_waterway.sql | 10 +++++++++- 9 files changed, 57 insertions(+), 16 deletions(-) diff --git a/layers/place/island_polygon_update.sql b/layers/place/island_polygon_update.sql index 57cca41..04c5432 100644 --- a/layers/place/island_polygon_update.sql +++ b/layers/place/island_polygon_update.sql @@ -1,5 +1,5 @@ -- etldoc: osm_island_polygon -> osm_island_polygon -CREATE FUNCTION convert_island_polygon_point() RETURNS VOID AS $$ +CREATE OR REPLACE FUNCTION convert_island_polygon_point() RETURNS VOID AS $$ BEGIN UPDATE osm_island_polygon SET geometry=topoint(geometry) WHERE ST_GeometryType(geometry) <> 'ST_Point'; ANALYZE osm_island_polygon; @@ -10,7 +10,7 @@ SELECT convert_island_polygon_point(); -- Handle updates -CREATE SCHEMA place_island; +CREATE SCHEMA IF NOT EXISTS place_island; CREATE TABLE IF NOT EXISTS place_island.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION place_island.flag() RETURNS trigger AS $$ @@ -31,6 +31,9 @@ CREATE OR REPLACE FUNCTION place_island.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_island_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON place_island.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_island_polygon FOR EACH STATEMENT diff --git a/layers/place/merge_city_rank.sql b/layers/place/merge_city_rank.sql index 78587ab..e7d9276 100644 --- a/layers/place/merge_city_rank.sql +++ b/layers/place/merge_city_rank.sql @@ -2,7 +2,7 @@ CREATE EXTENSION IF NOT EXISTS unaccent; -CREATE FUNCTION update_osm_city_point() RETURNS VOID AS $$ +CREATE OR REPLACE FUNCTION update_osm_city_point() RETURNS VOID AS $$ BEGIN -- Clear OSM key:rank ( https://github.com/openmaptiles/openmaptiles/issues/108 ) @@ -48,7 +48,7 @@ CREATE INDEX IF NOT EXISTS osm_city_point_rank_idx ON osm_city_point("rank"); -- Handle updates -CREATE SCHEMA place_city; +CREATE SCHEMA IF NOT EXISTS place_city; CREATE TABLE IF NOT EXISTS place_city.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION place_city.flag() RETURNS trigger AS $$ @@ -69,6 +69,9 @@ CREATE OR REPLACE FUNCTION place_city.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_city_point; +DROP TRIGGER IF EXISTS trigger_refresh ON place_city.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_city_point FOR EACH STATEMENT diff --git a/layers/place/merge_country_rank.sql b/layers/place/merge_country_rank.sql index 95a164a..fbf1d95 100644 --- a/layers/place/merge_country_rank.sql +++ b/layers/place/merge_country_rank.sql @@ -3,7 +3,7 @@ ALTER TABLE osm_country_point DROP CONSTRAINT IF EXISTS osm_country_point_rank_c -- etldoc: ne_10m_admin_0_countries -> osm_country_point -- etldoc: osm_country_point -> osm_country_point -CREATE FUNCTION update_osm_country_point() RETURNS VOID AS $$ +CREATE OR REPLACE FUNCTION update_osm_country_point() RETURNS VOID AS $$ BEGIN WITH important_country_point AS ( @@ -43,7 +43,7 @@ CREATE INDEX IF NOT EXISTS osm_country_point_rank_idx ON osm_country_point("rank -- Handle updates -CREATE SCHEMA place_country; +CREATE SCHEMA IF NOT EXISTS place_country; CREATE TABLE IF NOT EXISTS place_country.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION place_country.flag() RETURNS trigger AS $$ @@ -64,6 +64,9 @@ CREATE OR REPLACE FUNCTION place_country.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_country_point; +DROP TRIGGER IF EXISTS trigger_refresh ON place_country.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_country_point FOR EACH STATEMENT diff --git a/layers/place/merge_state_rank.sql b/layers/place/merge_state_rank.sql index d204a21..90c9616 100644 --- a/layers/place/merge_state_rank.sql +++ b/layers/place/merge_state_rank.sql @@ -3,7 +3,7 @@ ALTER TABLE osm_state_point DROP CONSTRAINT IF EXISTS osm_state_point_rank_const -- etldoc: ne_10m_admin_1_states_provinces_shp -> osm_state_point -- etldoc: osm_state_point -> osm_state_point -CREATE FUNCTION update_osm_state_point() RETURNS VOID AS $$ +CREATE OR REPLACE FUNCTION update_osm_state_point() RETURNS VOID AS $$ BEGIN WITH important_state_point AS ( @@ -39,7 +39,7 @@ CREATE INDEX IF NOT EXISTS osm_state_point_rank_idx ON osm_state_point("rank"); -- Handle updates -CREATE SCHEMA place_state; +CREATE SCHEMA IF NOT EXISTS place_state; CREATE TABLE IF NOT EXISTS place_state.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION place_state.flag() RETURNS trigger AS $$ @@ -60,6 +60,9 @@ CREATE OR REPLACE FUNCTION place_state.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_state_point; +DROP TRIGGER IF EXISTS trigger_refresh ON place_state.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_state_point FOR EACH STATEMENT diff --git a/layers/poi/poi_polygon_update.sql b/layers/poi/poi_polygon_update.sql index 51259e5..dcd4b3b 100644 --- a/layers/poi/poi_polygon_update.sql +++ b/layers/poi/poi_polygon_update.sql @@ -1,6 +1,6 @@ -- etldoc: osm_poi_polygon -> osm_poi_polygon -CREATE FUNCTION convert_poi_point() RETURNS VOID AS $$ +CREATE OR REPLACE FUNCTION convert_poi_point() RETURNS VOID AS $$ BEGIN UPDATE osm_poi_polygon SET geometry=topoint(geometry) WHERE ST_GeometryType(geometry) <> 'ST_Point'; ANALYZE osm_poi_polygon; @@ -11,7 +11,7 @@ SELECT convert_poi_point(); -- Handle updates -CREATE SCHEMA poi; +CREATE SCHEMA IF NOT EXISTS poi; CREATE TABLE IF NOT EXISTS poi.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION poi.flag() RETURNS trigger AS $$ @@ -32,6 +32,9 @@ CREATE OR REPLACE FUNCTION poi.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_poi_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON poi.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_poi_polygon FOR EACH STATEMENT diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 7a81a87..0648acb 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -4,6 +4,11 @@ -- to allow for nice label rendering -- Because this works well for roads that do not have relations as well +DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring CASCADE; +DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen1 CASCADE; +DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen2 CASCADE; +DROP MATERIALIZED VIEW IF EXISTS osm_transportation_name_linestring_gen3 CASCADE; + -- etldoc: osm_highway_linestring -> osm_transportation_name_linestring CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( SELECT @@ -58,7 +63,7 @@ CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx -- Handle updates -CREATE SCHEMA transportation_name; +CREATE SCHEMA IF NOT EXISTS transportation_name; CREATE TABLE IF NOT EXISTS transportation_name.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION transportation_name.flag() RETURNS trigger AS $$ @@ -82,6 +87,9 @@ CREATE OR REPLACE FUNCTION transportation_name.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_highway_linestring; +DROP TRIGGER IF EXISTS trigger_refresh ON transportation_name.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring FOR EACH STATEMENT @@ -91,4 +99,4 @@ CREATE CONSTRAINT TRIGGER trigger_refresh AFTER INSERT ON transportation_name.updates INITIALLY DEFERRED FOR EACH ROW - EXECUTE PROCEDURE transportation_name.refresh(); \ No newline at end of file + EXECUTE PROCEDURE transportation_name.refresh(); diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index fc776db..b918f4b 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -1,6 +1,8 @@ -- etldoc: osm_water_polygon -> osm_water_lakeline -- etldoc: lake_centerline -> osm_water_lakeline +DROP MATERIALIZED VIEW IF EXISTS osm_water_lakeline CASCADE; + CREATE MATERIALIZED VIEW osm_water_lakeline AS ( SELECT wp.osm_id, ll.wkb_geometry AS geometry, @@ -13,7 +15,7 @@ CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline -- Handle updates -CREATE SCHEMA water_lakeline; +CREATE SCHEMA IF NOT EXISTS water_lakeline; CREATE TABLE IF NOT EXISTS water_lakeline.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION water_lakeline.flag() RETURNS trigger AS $$ @@ -34,6 +36,9 @@ CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON water_lakeline.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index f938b76..2bf0de8 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -1,6 +1,8 @@ -- etldoc: osm_water_polygon -> osm_water_point -- etldoc: lake_centerline -> osm_water_point +DROP MATERIALIZED VIEW IF EXISTS osm_water_point CASCADE; + CREATE MATERIALIZED VIEW osm_water_point AS ( SELECT wp.osm_id, topoint(wp.geometry) AS geometry, @@ -10,10 +12,10 @@ CREATE MATERIALIZED VIEW osm_water_point AS ( WHERE ll.osm_id IS NULL AND wp.name <> '' ) WITH NO DATA; CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry); - + -- Handle updates -CREATE SCHEMA water_name; +CREATE SCHEMA IF NOT EXISTS water_name; CREATE TABLE IF NOT EXISTS water_name.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION water_name.flag() RETURNS trigger AS $$ @@ -34,6 +36,9 @@ CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON water_name.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index ec2628f..614cfae 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -4,6 +4,11 @@ -- and also makes it possible to filter out too short rivers -- etldoc: osm_waterway_linestring -> osm_important_waterway_linestring +DROP MATERIALIZED VIEW IF EXISTS osm_important_waterway_linestring CASCADE; +DROP MATERIALIZED VIEW IF EXISTS osm_important_waterway_linestring_gen1 CASCADE; +DROP MATERIALIZED VIEW IF EXISTS osm_important_waterway_linestring_gen2 CASCADE; +DROP MATERIALIZED VIEW IF EXISTS osm_important_waterway_linestring_gen3 CASCADE; + CREATE MATERIALIZED VIEW osm_important_waterway_linestring AS ( SELECT (ST_Dump(geometry)).geom AS geometry, @@ -45,7 +50,7 @@ CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx O -- Handle updates -CREATE SCHEMA waterway; +CREATE SCHEMA IF NOT EXISTS waterway; CREATE TABLE IF NOT EXISTS waterway.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION waterway.flag() RETURNS trigger AS $$ @@ -69,6 +74,9 @@ CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_waterway_linestring; +DROP TRIGGER IF EXISTS trigger_refresh ON waterway.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring FOR EACH STATEMENT From b58d80ce4473e799d9d5b997ec685c7f87ed04e0 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Thu, 5 Jan 2017 14:39:04 -0500 Subject: [PATCH 15/22] Make housenumber rerunnable --- layers/housenumber/housenumber_centroid.sql | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/layers/housenumber/housenumber_centroid.sql b/layers/housenumber/housenumber_centroid.sql index 1d1cf83..24c05ae 100644 --- a/layers/housenumber/housenumber_centroid.sql +++ b/layers/housenumber/housenumber_centroid.sql @@ -1,6 +1,6 @@ -- etldoc: osm_housenumber_point -> osm_housenumber_point -CREATE FUNCTION convert_housenumber_point() RETURNS VOID AS $$ +CREATE OR REPLACE FUNCTION convert_housenumber_point() RETURNS VOID AS $$ BEGIN UPDATE osm_housenumber_point SET geometry=topoint(geometry) WHERE ST_GeometryType(geometry) <> 'ST_Point'; END; @@ -10,7 +10,7 @@ SELECT convert_housenumber_point(); -- Handle updates -CREATE SCHEMA housenumber; +CREATE SCHEMA IF NOT EXISTS housenumber; CREATE TABLE IF NOT EXISTS housenumber.updates(id serial primary key, t text, unique (t)); CREATE OR REPLACE FUNCTION housenumber.flag() RETURNS trigger AS $$ @@ -31,6 +31,9 @@ CREATE OR REPLACE FUNCTION housenumber.refresh() RETURNS trigger AS $BODY$ language plpgsql; +DROP TRIGGER IF EXISTS trigger_flag ON osm_housenumber_point; +DROP TRIGGER IF EXISTS trigger_refresh ON housenumber.updates; + CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_housenumber_point FOR EACH STATEMENT From cda3af921596fd337da8b258d5e151f8f1f40923 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Fri, 6 Jan 2017 20:33:43 -0500 Subject: [PATCH 16/22] Change SELECT to PERFORM in function and drop triggers first --- layers/housenumber/housenumber_centroid.sql | 7 +++---- layers/place/island_polygon_update.sql | 8 ++++---- layers/place/merge_city_rank.sql | 8 +++----- layers/place/merge_country_rank.sql | 8 ++++---- layers/place/merge_state_rank.sql | 8 ++++---- layers/poi/poi_polygon_update.sql | 8 ++++---- layers/transportation_name/merge_highways.sql | 5 ++--- layers/water_name/water_lakeline.sql | 5 ++--- layers/water_name/water_point.sql | 5 ++--- layers/waterway/merge_waterway.sql | 5 ++--- 10 files changed, 30 insertions(+), 37 deletions(-) diff --git a/layers/housenumber/housenumber_centroid.sql b/layers/housenumber/housenumber_centroid.sql index 24c05ae..29c687e 100644 --- a/layers/housenumber/housenumber_centroid.sql +++ b/layers/housenumber/housenumber_centroid.sql @@ -1,3 +1,5 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_housenumber_point; +DROP TRIGGER IF EXISTS trigger_refresh ON housenumber.updates; -- etldoc: osm_housenumber_point -> osm_housenumber_point CREATE OR REPLACE FUNCTION convert_housenumber_point() RETURNS VOID AS $$ @@ -24,16 +26,13 @@ CREATE OR REPLACE FUNCTION housenumber.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh housenumber'; - SELECT convert_housenumber_point(); + PERFORM convert_housenumber_point(); DELETE FROM housenumber.updates; RETURN null; END; $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_housenumber_point; -DROP TRIGGER IF EXISTS trigger_refresh ON housenumber.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_housenumber_point FOR EACH STATEMENT diff --git a/layers/place/island_polygon_update.sql b/layers/place/island_polygon_update.sql index 04c5432..ef937a5 100644 --- a/layers/place/island_polygon_update.sql +++ b/layers/place/island_polygon_update.sql @@ -1,3 +1,6 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_island_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON place_island.updates; + -- etldoc: osm_island_polygon -> osm_island_polygon CREATE OR REPLACE FUNCTION convert_island_polygon_point() RETURNS VOID AS $$ BEGIN @@ -24,16 +27,13 @@ CREATE OR REPLACE FUNCTION place_island.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh place_island'; - SELECT convert_island_polygon_point(); + PERFORM convert_island_polygon_point(); DELETE FROM place_island.updates; RETURN null; END; $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_island_polygon; -DROP TRIGGER IF EXISTS trigger_refresh ON place_island.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_island_polygon FOR EACH STATEMENT diff --git a/layers/place/merge_city_rank.sql b/layers/place/merge_city_rank.sql index e7d9276..fa91994 100644 --- a/layers/place/merge_city_rank.sql +++ b/layers/place/merge_city_rank.sql @@ -1,7 +1,8 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_city_point; +DROP TRIGGER IF EXISTS trigger_refresh ON place_city.updates; CREATE EXTENSION IF NOT EXISTS unaccent; - CREATE OR REPLACE FUNCTION update_osm_city_point() RETURNS VOID AS $$ BEGIN @@ -62,16 +63,13 @@ CREATE OR REPLACE FUNCTION place_city.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh place_city rank'; - SELECT update_osm_city_point(); + PERFORM update_osm_city_point(); DELETE FROM place_city.updates; RETURN null; END; $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_city_point; -DROP TRIGGER IF EXISTS trigger_refresh ON place_city.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_city_point FOR EACH STATEMENT diff --git a/layers/place/merge_country_rank.sql b/layers/place/merge_country_rank.sql index fbf1d95..afc14ea 100644 --- a/layers/place/merge_country_rank.sql +++ b/layers/place/merge_country_rank.sql @@ -1,3 +1,6 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_country_point; +DROP TRIGGER IF EXISTS trigger_refresh ON place_country.updates; + ALTER TABLE osm_country_point DROP CONSTRAINT IF EXISTS osm_country_point_rank_constraint; -- etldoc: ne_10m_admin_0_countries -> osm_country_point @@ -57,16 +60,13 @@ CREATE OR REPLACE FUNCTION place_country.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh place_country rank'; - SELECT update_osm_country_point(); + PERFORM update_osm_country_point(); DELETE FROM place_country.updates; RETURN null; END; $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_country_point; -DROP TRIGGER IF EXISTS trigger_refresh ON place_country.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_country_point FOR EACH STATEMENT diff --git a/layers/place/merge_state_rank.sql b/layers/place/merge_state_rank.sql index 90c9616..fcf3279 100644 --- a/layers/place/merge_state_rank.sql +++ b/layers/place/merge_state_rank.sql @@ -1,3 +1,6 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_state_point; +DROP TRIGGER IF EXISTS trigger_refresh ON place_state.updates; + ALTER TABLE osm_state_point DROP CONSTRAINT IF EXISTS osm_state_point_rank_constraint; -- etldoc: ne_10m_admin_1_states_provinces_shp -> osm_state_point @@ -53,16 +56,13 @@ CREATE OR REPLACE FUNCTION place_state.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh place_state rank'; - SELECT update_osm_state_point(); + PERFORM update_osm_state_point(); DELETE FROM place_state.updates; RETURN null; END; $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_state_point; -DROP TRIGGER IF EXISTS trigger_refresh ON place_state.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_state_point FOR EACH STATEMENT diff --git a/layers/poi/poi_polygon_update.sql b/layers/poi/poi_polygon_update.sql index dcd4b3b..22484ac 100644 --- a/layers/poi/poi_polygon_update.sql +++ b/layers/poi/poi_polygon_update.sql @@ -1,3 +1,6 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_poi_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON poi.updates; + -- etldoc: osm_poi_polygon -> osm_poi_polygon CREATE OR REPLACE FUNCTION convert_poi_point() RETURNS VOID AS $$ @@ -25,16 +28,13 @@ CREATE OR REPLACE FUNCTION poi.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh poi'; - SELECT convert_poi_point(); + PERFORM convert_poi_point(); DELETE FROM poi.updates; RETURN null; END; $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_poi_polygon; -DROP TRIGGER IF EXISTS trigger_refresh ON poi.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_poi_polygon FOR EACH STATEMENT diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 0648acb..025b274 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -1,3 +1,5 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_highway_linestring; +DROP TRIGGER IF EXISTS trigger_refresh ON transportation_name.updates; -- Instead of using relations to find out the road names we -- stitch together the touching ways with the same name @@ -87,9 +89,6 @@ CREATE OR REPLACE FUNCTION transportation_name.refresh() RETURNS trigger AS $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_highway_linestring; -DROP TRIGGER IF EXISTS trigger_refresh ON transportation_name.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring FOR EACH STATEMENT diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index b918f4b..3570cc2 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -1,3 +1,5 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON water_lakeline.updates; -- etldoc: osm_water_polygon -> osm_water_lakeline -- etldoc: lake_centerline -> osm_water_lakeline @@ -36,9 +38,6 @@ CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; -DROP TRIGGER IF EXISTS trigger_refresh ON water_lakeline.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 2bf0de8..7c49547 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -1,3 +1,5 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; +DROP TRIGGER IF EXISTS trigger_refresh ON water_name.updates; -- etldoc: osm_water_polygon -> osm_water_point -- etldoc: lake_centerline -> osm_water_point @@ -36,9 +38,6 @@ CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; -DROP TRIGGER IF EXISTS trigger_refresh ON water_name.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 614cfae..e3bcd89 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -1,3 +1,5 @@ +DROP TRIGGER IF EXISTS trigger_flag ON osm_waterway_linestring; +DROP TRIGGER IF EXISTS trigger_refresh ON waterway.updates; -- We merge the waterways by name like the highways -- This helps to drop not important rivers (since they do not have a name) @@ -74,9 +76,6 @@ CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS $BODY$ language plpgsql; -DROP TRIGGER IF EXISTS trigger_flag ON osm_waterway_linestring; -DROP TRIGGER IF EXISTS trigger_refresh ON waterway.updates; - CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring FOR EACH STATEMENT From 4c1ea3e4b1dd8edf4a558e60e38c2018425e06d7 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Sat, 7 Jan 2017 22:26:09 -0500 Subject: [PATCH 17/22] Refresh concurrently and create materialized views with data. --- layers/transportation_name/merge_highways.sql | 16 ++++++++-------- layers/water_name/water_lakeline.sql | 4 ++-- layers/water_name/water_point.sql | 4 ++-- layers/waterway/merge_waterway.sql | 16 ++++++++-------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index 025b274..d3ebedf 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -36,7 +36,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring AS ( WHERE (name <> '' OR ref <> '') AND NULLIF(highway, '') IS NOT NULL GROUP BY name, highway, ref ) AS highway_union -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_geometry_idx ON osm_transportation_name_linestring USING gist(geometry); -- etldoc: osm_transportation_name_linestring -> osm_transportation_name_linestring_gen1 @@ -44,7 +44,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen1 AS ( SELECT ST_Simplify(geometry, 50) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 8000 -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen1_geometry_idx ON osm_transportation_name_linestring_gen1 USING gist(geometry); -- etldoc: osm_transportation_name_linestring_gen1 -> osm_transportation_name_linestring_gen2 @@ -52,7 +52,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen2 AS ( SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring_gen1 WHERE highway IN ('motorway','trunk') AND ST_Length(geometry) > 14000 -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen2_geometry_idx ON osm_transportation_name_linestring_gen2 USING gist(geometry); -- etldoc: osm_transportation_name_linestring_gen2 -> osm_transportation_name_linestring_gen3 @@ -60,7 +60,7 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS ( SELECT ST_Simplify(geometry, 120) AS geometry, osm_id, member_osm_ids, name, ref, highway, z_order FROM osm_transportation_name_linestring_gen2 WHERE highway = 'motorway' AND ST_Length(geometry) > 20000 -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx ON osm_transportation_name_linestring_gen3 USING gist(geometry); -- Handle updates @@ -79,10 +79,10 @@ CREATE OR REPLACE FUNCTION transportation_name.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh transportation_name'; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2; - REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen1; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen2; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen3; DELETE FROM transportation_name.updates; RETURN null; END; diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index 3570cc2..dea4251 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -12,7 +12,7 @@ CREATE MATERIALIZED VIEW osm_water_lakeline AS ( FROM osm_water_polygon AS wp INNER JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE wp.name <> '' -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline USING gist(geometry); -- Handle updates @@ -31,7 +31,7 @@ CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh water_lakeline'; - REFRESH MATERIALIZED VIEW osm_water_lakeline; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_lakeline; DELETE FROM water_lakeline.updates; RETURN null; END; diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 7c49547..68a7657 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -12,7 +12,7 @@ CREATE MATERIALIZED VIEW osm_water_point AS ( FROM osm_water_polygon AS wp LEFT JOIN lake_centerline ll ON wp.osm_id = ll.osm_id WHERE ll.osm_id IS NULL AND wp.name <> '' -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry); -- Handle updates @@ -31,7 +31,7 @@ CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh water_name'; - REFRESH MATERIALIZED VIEW osm_water_point; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_point; DELETE FROM water_name.updates; RETURN null; END; diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index e3bcd89..03f248f 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -23,7 +23,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring AS ( WHERE name <> '' AND waterway = 'river' GROUP BY name ) AS waterway_union -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_geometry_idx ON osm_important_waterway_linestring USING gist(geometry); -- etldoc: osm_important_waterway_linestring -> osm_important_waterway_linestring_gen1 @@ -31,7 +31,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen1 AS ( SELECT ST_Simplify(geometry, 60) AS geometry, name FROM osm_important_waterway_linestring WHERE ST_Length(geometry) > 1000 -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen1_geometry_idx ON osm_important_waterway_linestring_gen1 USING gist(geometry); -- etldoc: osm_important_waterway_linestring_gen1 -> osm_important_waterway_linestring_gen2 @@ -39,7 +39,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen2 AS ( SELECT ST_Simplify(geometry, 100) AS geometry, name FROM osm_important_waterway_linestring_gen1 WHERE ST_Length(geometry) > 4000 -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen2_geometry_idx ON osm_important_waterway_linestring_gen2 USING gist(geometry); -- etldoc: osm_important_waterway_linestring_gen2 -> osm_important_waterway_linestring_gen3 @@ -47,7 +47,7 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen3 AS ( SELECT ST_Simplify(geometry, 200) AS geometry, name FROM osm_important_waterway_linestring_gen2 WHERE ST_Length(geometry) > 8000 -) WITH NO DATA; +); CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx ON osm_important_waterway_linestring_gen3 USING gist(geometry); -- Handle updates @@ -66,10 +66,10 @@ CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh transportation_name'; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2; - REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen1; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen2; + REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen3; DELETE FROM waterway.updates; RETURN null; END; From f6c3b932c7369f8d3ae8defd05b19e91885b0629 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Tue, 10 Jan 2017 14:50:35 -0500 Subject: [PATCH 18/22] Fix raise log for waterway --- layers/waterway/merge_waterway.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 03f248f..93c8200 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -65,7 +65,7 @@ $$ language plpgsql; CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS $BODY$ BEGIN - RAISE LOG 'Refresh transportation_name'; + RAISE LOG 'Refresh waterway'; REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring; REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen1; REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen2; From 18110d8ca6a09e048761f6d6fe6a037f6b260063 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 11 Jan 2017 13:05:17 -0500 Subject: [PATCH 19/22] Do not refresh osm_water_point concurrently "Create a unique index with no WHERE clause on one or more columns of the materialized view." --- layers/water_name/water_point.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 68a7657..856fc9c 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -31,7 +31,7 @@ CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh water_name'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_point; + REFRESH MATERIALIZED VIEW osm_water_point; DELETE FROM water_name.updates; RETURN null; END; From beda95186379a10eb07adefdd842584ad3e9f739 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 11 Jan 2017 16:12:11 -0500 Subject: [PATCH 20/22] Change log notice for water_point --- layers/water_name/water_point.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 856fc9c..7fdc379 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -30,7 +30,7 @@ $$ language plpgsql; CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS $BODY$ BEGIN - RAISE LOG 'Refresh water_name'; + RAISE LOG 'Refresh water_point'; REFRESH MATERIALIZED VIEW osm_water_point; DELETE FROM water_name.updates; RETURN null; From 31e0466b678b5d1a2b05ae5fb0b23d5a458c2ace Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 11 Jan 2017 16:31:47 -0500 Subject: [PATCH 21/22] Disable concurrent refresh as its problematic. --- layers/transportation_name/merge_highways.sql | 8 ++++---- layers/water_name/water_lakeline.sql | 2 +- layers/water_name/water_point.sql | 20 +++++++++---------- layers/waterway/merge_waterway.sql | 8 ++++---- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/layers/transportation_name/merge_highways.sql b/layers/transportation_name/merge_highways.sql index d3ebedf..7ad1f16 100644 --- a/layers/transportation_name/merge_highways.sql +++ b/layers/transportation_name/merge_highways.sql @@ -79,10 +79,10 @@ CREATE OR REPLACE FUNCTION transportation_name.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh transportation_name'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen1; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen2; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen3; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2; + REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3; DELETE FROM transportation_name.updates; RETURN null; END; diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index dea4251..56aa383 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -31,7 +31,7 @@ CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh water_lakeline'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_water_lakeline; + REFRESH MATERIALIZED VIEW osm_water_lakeline; DELETE FROM water_lakeline.updates; RETURN null; END; diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 7fdc379..37640da 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -1,5 +1,5 @@ DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; -DROP TRIGGER IF EXISTS trigger_refresh ON water_name.updates; +DROP TRIGGER IF EXISTS trigger_refresh ON water_point.updates; -- etldoc: osm_water_polygon -> osm_water_point -- etldoc: lake_centerline -> osm_water_point @@ -17,22 +17,22 @@ CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING -- Handle updates -CREATE SCHEMA IF NOT EXISTS water_name; +CREATE SCHEMA IF NOT EXISTS water_point; -CREATE TABLE IF NOT EXISTS water_name.updates(id serial primary key, t text, unique (t)); -CREATE OR REPLACE FUNCTION water_name.flag() RETURNS trigger AS $$ +CREATE TABLE IF NOT EXISTS water_point.updates(id serial primary key, t text, unique (t)); +CREATE OR REPLACE FUNCTION water_point.flag() RETURNS trigger AS $$ BEGIN - INSERT INTO water_name.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; + INSERT INTO water_point.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING; RETURN null; END; $$ language plpgsql; -CREATE OR REPLACE FUNCTION water_name.refresh() RETURNS trigger AS +CREATE OR REPLACE FUNCTION water_point.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh water_point'; REFRESH MATERIALIZED VIEW osm_water_point; - DELETE FROM water_name.updates; + DELETE FROM water_point.updates; RETURN null; END; $BODY$ @@ -41,10 +41,10 @@ language plpgsql; CREATE TRIGGER trigger_flag AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT - EXECUTE PROCEDURE water_name.flag(); + EXECUTE PROCEDURE water_point.flag(); CREATE CONSTRAINT TRIGGER trigger_refresh - AFTER INSERT ON water_name.updates + AFTER INSERT ON water_point.updates INITIALLY DEFERRED FOR EACH ROW - EXECUTE PROCEDURE water_name.refresh(); + EXECUTE PROCEDURE water_point.refresh(); diff --git a/layers/waterway/merge_waterway.sql b/layers/waterway/merge_waterway.sql index 93c8200..5cf6ab0 100644 --- a/layers/waterway/merge_waterway.sql +++ b/layers/waterway/merge_waterway.sql @@ -66,10 +66,10 @@ CREATE OR REPLACE FUNCTION waterway.refresh() RETURNS trigger AS $BODY$ BEGIN RAISE LOG 'Refresh waterway'; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen1; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen2; - REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen3; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2; + REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3; DELETE FROM waterway.updates; RETURN null; END; From e71311a8d879e170b1c95c1099778c82dba5e964 Mon Sep 17 00:00:00 2001 From: stirringhalo Date: Wed, 11 Jan 2017 22:46:24 -0500 Subject: [PATCH 22/22] Have to change name on trigger so they don't overwrite each other... --- layers/water_name/water_lakeline.sql | 4 ++-- layers/water_name/water_point.sql | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/layers/water_name/water_lakeline.sql b/layers/water_name/water_lakeline.sql index 56aa383..d9c58ea 100644 --- a/layers/water_name/water_lakeline.sql +++ b/layers/water_name/water_lakeline.sql @@ -1,4 +1,4 @@ -DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; +DROP TRIGGER IF EXISTS trigger_flag_line ON osm_water_polygon; DROP TRIGGER IF EXISTS trigger_refresh ON water_lakeline.updates; -- etldoc: osm_water_polygon -> osm_water_lakeline @@ -38,7 +38,7 @@ CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS $BODY$ language plpgsql; -CREATE TRIGGER trigger_flag +CREATE TRIGGER trigger_flag_line AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT EXECUTE PROCEDURE water_lakeline.flag(); diff --git a/layers/water_name/water_point.sql b/layers/water_name/water_point.sql index 37640da..4870879 100644 --- a/layers/water_name/water_point.sql +++ b/layers/water_name/water_point.sql @@ -1,4 +1,4 @@ -DROP TRIGGER IF EXISTS trigger_flag ON osm_water_polygon; +DROP TRIGGER IF EXISTS trigger_flag_point ON osm_water_polygon; DROP TRIGGER IF EXISTS trigger_refresh ON water_point.updates; -- etldoc: osm_water_polygon -> osm_water_point @@ -38,7 +38,7 @@ CREATE OR REPLACE FUNCTION water_point.refresh() RETURNS trigger AS $BODY$ language plpgsql; -CREATE TRIGGER trigger_flag +CREATE TRIGGER trigger_flag_point AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon FOR EACH STATEMENT EXECUTE PROCEDURE water_point.flag();