Create aggregates only if they do not exist

This commit is contained in:
Rafa de la Torre 2016-08-10 18:56:11 +02:00
parent ac51256463
commit 4118b57f1f
2 changed files with 39 additions and 13 deletions

View File

@ -10,10 +10,22 @@ CREATE OR REPLACE FUNCTION
END END
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
-- Create aggregate if it did not exist
CREATE AGGREGATE CDB_PyAgg(NUMERIC[])( DO $$
SFUNC = CDB_PyAggS, BEGIN
STYPE = Numeric[], IF NOT EXISTS (
INITCOND = "{}" SELECT *
); FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE n.nspname = 'cdb_crankshaft'
AND p.proname = 'cdb_pyagg'
AND p.proisagg)
THEN
CREATE AGGREGATE CDB_PyAgg(NUMERIC[]) (
SFUNC = CDB_PyAggS,
STYPE = Numeric[],
INITCOND = "{}"
);
END IF;
END
$$ LANGUAGE plpgsql;

View File

@ -41,9 +41,23 @@ BEGIN
END END
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
CREATE AGGREGATE CDB_WeightedMean(geometry(Point, 4326), NUMERIC)( -- Create aggregate if it did not exist
SFUNC = CDB_WeightedMeanS, DO $$
FINALFUNC = CDB_WeightedMeanF, BEGIN
STYPE = Numeric[], IF NOT EXISTS (
INITCOND = "{0.0,0.0,0.0}" SELECT *
); FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE n.nspname = 'cdb_crankshaft'
AND p.proname = 'cdb_weightedmean'
AND p.proisagg)
THEN
CREATE AGGREGATE CDB_WeightedMean(geometry(Point, 4326), NUMERIC) (
SFUNC = CDB_WeightedMeanS,
FINALFUNC = CDB_WeightedMeanF,
STYPE = Numeric[],
INITCOND = "{0.0,0.0,0.0}"
);
END IF;
END
$$ LANGUAGE plpgsql;