From: Raúl Marín Rodríguez Date: Tue, 11 Jun 2019 10:18:21 +0000 (+0000) Subject: Use CREATE OR REPLACE AGGREGATE for PG12+ X-Git-Tag: 3.0.0alpha3~69 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80d6e498c3e87a0d966761512c7bbba2d9c463b2;p=postgis Use CREATE OR REPLACE AGGREGATE for PG12+ References #4352 git-svn-id: http://svn.osgeo.org/postgis/trunk@17488 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/NEWS b/NEWS index 7b8cad8b3..532bcecc6 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,7 @@ Additional features enabled if you are running Proj6+ and PostgreSQL 12 - #4198, Add ST_ConstrainedDelaunayTriangles SFCGAL function (Darafei Praliaskouski) - #4414, Include version number in address_standardizer lib (Raúl Marín) + - #4352, Use CREATE OR REPLACE AGGREGATE for PG12+ (Raúl Marín) PostGIS 3.0.0alpha1 2019/05/26 @@ -159,6 +160,7 @@ PostGIS 3.0.0 (Darafei Praliaskouski) - #4422, Modernize Python 2 code to get ready for Python 3 (Christian Clauss) - #4383, Fix undefined behaviour in implicit conversions (Raúl Marín) + - #4352, Use CREATE OR REPLACE AGGREGATE for PG12+ (Raúl Marín) PostGIS 2.5.0 diff --git a/utils/postgis_proc_upgrade.pl b/utils/postgis_proc_upgrade.pl index 9f2d17279..ba4768535 100755 --- a/utils/postgis_proc_upgrade.pl +++ b/utils/postgis_proc_upgrade.pl @@ -234,6 +234,7 @@ EOF } # This code handles aggregates by dropping and recreating them. + # For PG12 use REPLACE instead if ( /^create aggregate\s+([^(]+)\s*\(/i ) { my $aggname = $1; @@ -258,12 +259,21 @@ EOF if ( ! $last_updated ) { die "ERROR: no last updated info for aggregate '${aggsig}'\n"; } + + my $pg12_def = $def =~ s/CREATE AGGREGATE/CREATE OR REPLACE AGGREGATE/r; + if ($pg12_def eq "") + { + $pg12_def = "RAISE EXCEPTION 'Could not parse AGGREGATE'" + } print "-- Aggregate ${aggsig} -- LastUpdated: ${last_updated}\n"; print <<"EOF"; DO LANGUAGE 'plpgsql' \$postgis_proc_upgrade\$ BEGIN - IF $last_updated > version_from_num OR ( + IF current_setting('server_version_num')::integer >= 120000 + THEN + EXECUTE \$postgis_proc_upgrade_parsed_def\$ $pg12_def \$postgis_proc_upgrade_parsed_def\$; + ELSIF $last_updated > version_from_num OR ( $last_updated = version_from_num AND version_from_isdev ) FROM _postgis_upgrade_info THEN