Use schemas to update on commit, untested

This commit is contained in:
stirringhalo 2017-01-04 16:59:42 -05:00
parent 35a5ba1ade
commit 2fd3be1403
4 changed files with 92 additions and 39 deletions

View File

@ -56,25 +56,43 @@ CREATE MATERIALIZED VIEW osm_transportation_name_linestring_gen3 AS (
) WITH NO DATA; ) WITH NO DATA;
CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_gen3_geometry_idx ON osm_transportation_name_linestring_gen3 USING gist(geometry); 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$ $BODY$
BEGIN BEGIN
RAISE LOG 'Refresh osm_highway_linestring based tables'; RAISE LOG 'Refresh transportation_name';
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring;
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen1; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen1;
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen2; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen2;
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_transportation_name_linestring_gen3; REFRESH MATERIALIZED VIEW osm_transportation_name_linestring_gen3;
DELETE FROM transportation_name.updates;
RETURN null; RETURN null;
END; END;
$BODY$ $BODY$
language plpgsql; 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 AFTER INSERT OR UPDATE OR DELETE ON osm_highway_linestring
FOR EACH STATEMENT 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();

View File

@ -13,32 +13,34 @@ CREATE INDEX IF NOT EXISTS osm_water_lakeline_geometry_idx ON osm_water_lakeline
-- Handle updates -- Handle updates
CREATE TABLE IF NOT EXISTS updates_osm_water_polygon(id serial primary key, t text, unique (t)); CREATE SCHEMA water_lakeline;
CREATE OR REPLACE FUNCTION flag_update_osm_water_polygon() RETURNS trigger AS $$
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 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; RETURN null;
END; END;
$$ language plpgsql; $$ language plpgsql;
CREATE OR REPLACE FUNCTION refresh_osm_water_lakeline() RETURNS trigger AS CREATE OR REPLACE FUNCTION water_lakeline.refresh() RETURNS trigger AS
$BODY$ $BODY$
BEGIN BEGIN
RAISE LOG 'Refresh osm_water_lakeline based tables'; RAISE LOG 'Refresh water_lakeline';
REFRESH MATERIALIZED VIEW osm_water_lakeline; REFRESH MATERIALIZED VIEW osm_water_lakeline;
DELETE FROM updates_osm_water_polygon; DELETE FROM water_lakeline.updates;
RETURN null; RETURN null;
END; END;
$BODY$ $BODY$
language plpgsql; 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 AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon
FOR EACH STATEMENT FOR EACH STATEMENT
EXECUTE PROCEDURE flag_update_osm_water_polygon(); EXECUTE PROCEDURE water_lakeline.flag();
CREATE CONSTRAINT TRIGGER commit_osm_water_polygon CREATE CONSTRAINT TRIGGER water_lakeline.trigger_refresh
AFTER INSERT ON updates_osm_water_polygon AFTER INSERT ON water_lakeline.updates
INITIALLY DEFERRED INITIALLY DEFERRED
FOR EACH ROW FOR EACH ROW
EXECUTE PROCEDURE refresh_osm_water_lakeline(); EXECUTE PROCEDURE water_lakeline.refresh();

View File

@ -11,19 +11,36 @@ CREATE MATERIALIZED VIEW osm_water_point AS (
) WITH NO DATA; ) WITH NO DATA;
CREATE INDEX IF NOT EXISTS osm_water_point_geometry_idx ON osm_water_point USING gist (geometry); 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$ $BODY$
BEGIN BEGIN
RAISE LOG 'Refresh osm_water polygon based tables'; 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; RETURN null;
END; END;
$BODY$ $BODY$
language plpgsql; 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 AFTER INSERT OR UPDATE OR DELETE ON osm_water_polygon
FOR EACH STATEMENT 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();

View File

@ -43,26 +43,42 @@ CREATE MATERIALIZED VIEW osm_important_waterway_linestring_gen3 AS (
) WITH NO DATA; ) WITH NO DATA;
CREATE INDEX IF NOT EXISTS osm_important_waterway_linestring_gen3_geometry_idx ON osm_important_waterway_linestring_gen3 USING gist(geometry); 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$ $BODY$
BEGIN BEGIN
RAISE LOG 'Refresh osm_waterway_linestring based tables'; RAISE LOG 'Refresh transportation_name';
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring; REFRESH MATERIALIZED VIEW osm_important_waterway_linestring;
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen1; REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen1;
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen2; REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen2;
REFRESH MATERIALIZED VIEW CONCURRENTLY osm_important_waterway_linestring_gen3; REFRESH MATERIALIZED VIEW osm_important_waterway_linestring_gen3;
DELETE FROM waterway.updates;
RETURN null; RETURN null;
END; END;
$BODY$ $BODY$
language plpgsql; 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 AFTER INSERT OR UPDATE OR DELETE ON osm_waterway_linestring
FOR EACH STATEMENT 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();