diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl index 4cbc75644c..ced889601f 100644 --- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl +++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl @@ -226,6 +226,8 @@ ORDER BY c.oid::regclass::text EOM $horizon_query =~ s/\s+/ /g; # run it together on one line my $horizon1 = $oldnode->safe_psql('regression', $horizon_query); +chomp($horizon1); +my @horizon1_values = split(/\|/, $horizon1); # In a VPATH build, we'll be started in the source directory, but we want # to run pg_upgrade in the build directory so that any files generated finish @@ -313,6 +315,8 @@ $newnode->command_ok( # And record the horizons from the upgraded cluster as well. my $horizon2 = $newnode->safe_psql('regression', $horizon_query); +chomp($horizon2); +my @horizon2_values = split(/\|/, $horizon2); # Compare the two dumps, there should be no differences. my $compare_res = compare("$tempdir/dump1.sql", "$tempdir/dump2.sql"); @@ -331,8 +335,13 @@ if ($compare_res != 0) print "=== EOF ===\n"; } -# Compare the horizons, there should be no differences. -my $horizons_ok = $horizon1 eq $horizon2; +# Compare the horizons. There should be no change in the OID, so we will test +# for equality. However, because autovacuum may have run between the two +# horizions, we will check if the updated horizon XIDs are greater than or +# equal to the originals. +my $horizons_ok = $horizon2_values[0] eq $horizon1_values[0] && + int($horizon2_values[1]) <= int($horizon1_values[1]) + 1000 && + int($horizon2_values[2]) <= int($horizon1_values[2]) + 1000; ok($horizons_ok, 'old and new horizons match after pg_upgrade'); # Provide more context if the horizons do not match.