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();