$$ LANGUAGE sql STABLE STRICT
COST 100;
+-- Availability: 2.0.0
+-- Changed: 2.2.0
CREATE OR REPLACE FUNCTION _raster_constraint_nodata_values(rast raster)
RETURNS numeric[] AS
$$ SELECT array_agg(round(nodatavalue::numeric, 10))::numeric[] FROM st_bandmetadata($1, ARRAY[]::int[]); $$
DROP FUNCTION IF EXISTS _st_slope4ma(float8[], text, text[]);
-- function signature change
-DROP FUNCTION IF EXISTS _raster_constraint_nodata_values(rast raster);
+-- return value changed
+DO LANGUAGE 'plpgsql' $$
+DECLARE
+ cnt bigint;
+BEGIN
+ SELECT
+ count(*)
+ INTO cnt
+ FROM pg_proc f
+ JOIN pg_type t
+ ON f.prorettype = t.oid
+ WHERE lower(f.proname) = '_raster_constraint_nodata_values'
+ AND f.pronargs = 1
+ AND t.typname = '_float8'; -- array form
+
+ IF cnt > 0 THEN
+ RAISE NOTICE 'Dropping _raster_constraint_nodata_values(raster) due to return value changes. Unfortunately, this is a DROP ... CASCADE as the NODATA raster constraint uses _raster_constraint_nodata_values(raster). You will need to reapply AddRasterConstraint(''SCHEMA'', ''TABLE'', ''COLUMN'', ''nodata'') to any raster column that requires this constraint.';
+ DROP FUNCTION IF EXISTS _raster_constraint_nodata_values(raster) CASCADE;
+ END IF;
+END;
+$$;