]> granicus.if.org Git - postgis/commitdiff
Use CREATE OR REPLACE AGGREGATE for PG12+
authorRaúl Marín Rodríguez <rmrodriguez@carto.com>
Tue, 11 Jun 2019 10:18:21 +0000 (10:18 +0000)
committerRaúl Marín Rodríguez <rmrodriguez@carto.com>
Tue, 11 Jun 2019 10:18:21 +0000 (10:18 +0000)
References #4352

git-svn-id: http://svn.osgeo.org/postgis/trunk@17488 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
utils/postgis_proc_upgrade.pl

diff --git a/NEWS b/NEWS
index 7b8cad8b383e492cd607e372dbb660741bfa0652..532bcecc6d073d0d5f34d7f27030f1b0f0ce5f7c 100644 (file)
--- 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
index 9f2d1727987e8b953254f58075a84d32ac6412b4..ba47685357d3572aee26cc50d6d8ebbe11a3b5f2 100755 (executable)
@@ -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