Fix cross-version upgrades with XMLSERIALIZE(NO INDENT)
authorMichael Paquier <[email protected]>
Fri, 21 Feb 2025 11:37:31 +0000 (20:37 +0900)
committerMichael Paquier <[email protected]>
Fri, 21 Feb 2025 11:37:31 +0000 (20:37 +0900)
Dumps from versions older than v16 do not know about NO INDENT in a
XMLSERIALIZE() clause.  This commit adjusts AdjustUpgrade.pm so as NO
INDENT is discarded in the contents of the new dump adjusted for
comparison when the old version is v15 or older.  This should be enough
to make the cross-version upgrade tests pass.

Per report from buildfarm member crake.  Oversight in 984410b92326.

Reviewed-by: Andrew Dunstan <[email protected]>
Discussion: https://postgr.es/m/88b183f1-ebf9-4f51-9144-3704380ccae7@dunslane.net
Backpatch-through: 16

src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm

index c6455427df546039e17bee27b0bcbe3ee47ce4ff..64f1f910ebf20d3c6667b2efcfaf234639ee38fa 100644 (file)
@@ -636,6 +636,12 @@ sub adjust_new_dumpfile
    $dump =~ s ['version', '\d+'::integer,]
        ['version', '000000'::integer,]mg;
 
+   # pre-v16 dumps do not know about XMLSERIALIZE(NO INDENT).
+   if ($old_version < 16)
+   {
+       $dump =~ s/XMLSERIALIZE\((.*)? NO INDENT\)/XMLSERIALIZE\($1\)/mg;
+   }
+
    if ($old_version < 14)
    {
        # Suppress noise-word uses of IN in CREATE/ALTER PROCEDURE.