scripts/database/proj-geom-cleanup.sql (57 lines of code) (raw):
-- Filter out projects with out of bound geometries
-- Stores results in a temporary table `project_list`
-- X (lng), Y (lat)
SELECT
projects.id
INTO TEMPORARY TABLE
invalid_geom
FROM
projects
WHERE
ST_XMin(geometry) < -180
or ST_XMax(geometry) > 180
or ST_YMin(geometry) < -90
or ST_YMax(geometry) > 90;
-- Filter out projects with low mappig rates
-- Stores results in a temporary table `stale_projects`
-- Last updated in 2016 and < 10% mapped tasks
SELECT
projects.id
INTO TEMPORARY TABLE
stale_projects
FROM
projects
WHERE
extract(year FROM last_updated) < 2017
AND tasks_mapped/total_tasks < 0.1;
-- Function to iterate over invalid_geoms and delete table entries
-- Affected tables:
-- project_info, project_chat
-- task_history, task_invalidation_history, tasks
CREATE OR REPLACE FUNCTION delete_invalid_geom()
RETURNS SETOF text AS
$func$
DECLARE
proj int;
BEGIN
FOR proj IN
SELECT * FROM invalid_geom
LOOP
DELETE FROM public.project_info WHERE project_id = proj;
DELETE FROM public.project_chat WHERE project_id = proj;
DELETE FROM public.task_history WHERE project_id = proj;
DELETE FROM public.project_priority_areas WHERE project_id = proj;
DELETE FROM public.messages WHERE project_id = proj;
DELETE FROM public.task_invalidation_history WHERE project_id = proj;
DELETE FROM public.tasks WHERE project_id = proj;
DELETE FROM public.projects WHERE id = proj;
RETURN NEXT proj;
-- RAISE NOTICE 'Project: %', proj;
END LOOP;
END
$func$ LANGUAGE plpgsql;
SELECT * from delete_invalid_geom();
CREATE OR REPLACE FUNCTION garden_stale_projects()
RETURNS SETOF text AS
$func$
DECLARE
proj int;
BEGIN
FOR proj IN
SELECT * FROM stale_projects
LOOP
UPDATE projects SET STATUS = 0 WHERE id = proj;
RETURN NEXT proj;
-- RAISE NOTICE 'Project: %', proj;
END LOOP;
END
$func$ LANGUAGE plpgsql;
SELECT * from garden_stale_projects();