Tighten pg_upgrade's new check for non-upgradable anyarray usages.
authorTom Lane <[email protected]>
Tue, 5 Jul 2022 22:23:19 +0000 (18:23 -0400)
committerTom Lane <[email protected]>
Tue, 5 Jul 2022 22:23:33 +0000 (18:23 -0400)
We only need to reject cases when the aggregate or operator is
itself declared with a polymorphic type.  Per buildfarm.

Discussion: https://postgr.es/m/3383880.QJadu78ljV@vejsadalnx

src/bin/pg_upgrade/check.c

index 332e13fd5758444f03adc2893eea8abb5462f9a5..69611bef4ab65decaa647f36efe3139b8ce40384 100644 (file)
@@ -1070,6 +1070,7 @@ check_for_incompatible_polymorphics(ClusterInfo *cluster)
                                "JOIN pg_proc AS transfn ON transfn.oid=a.aggtransfn "
                                "WHERE p.oid >= 16384 "
                                "AND a.aggtransfn = ANY(ARRAY[%s]::regprocedure[]) "
+                               "AND a.aggtranstype = ANY(ARRAY['anyarray', 'anyelement']::regtype[]) "
 
        /* Aggregate final functions */
                                "UNION ALL "
@@ -1079,13 +1080,15 @@ check_for_incompatible_polymorphics(ClusterInfo *cluster)
                                "JOIN pg_proc AS finalfn ON finalfn.oid=a.aggfinalfn "
                                "WHERE p.oid >= 16384 "
                                "AND a.aggfinalfn = ANY(ARRAY[%s]::regprocedure[]) "
+                               "AND a.aggtranstype = ANY(ARRAY['anyarray', 'anyelement']::regtype[]) "
 
        /* Operators */
                                "UNION ALL "
                                "SELECT 'operator' AS objkind, op.oid::regoperator::text AS objname "
                                "FROM pg_operator AS op "
                                "WHERE op.oid >= 16384 "
-                               "AND oprcode = ANY(ARRAY[%s]::regprocedure[]);",
+                               "AND oprcode = ANY(ARRAY[%s]::regprocedure[]) "
+                               "AND oprleft = ANY(ARRAY['anyarray', 'anyelement']::regtype[]);",
                                old_polymorphics.data,
                                old_polymorphics.data,
                                old_polymorphics.data);