dobjcmp10-demo-v0.patch.noci

text/plain

Filename: dobjcmp10-demo-v0.patch.noci
Type: text/plain
Part: 0
Message: Test instability when pg_dump orders by OID
From: Noah Misch <noah@leadboat.com>

Demo 002_pg_upgrade.pl schema diffs from using OID in pg_dump sort.

Not for commit.  This reverses the pg_dump OID sort for one side of the
diff, simulating a worst case for "pg_restore -j" perturbing OID order.

diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c
index 0b09777..a3d49a5 100644
--- a/src/bin/pg_dump/pg_dump_sort.c
+++ b/src/bin/pg_dump/pg_dump_sort.c
@@ -319,7 +319,8 @@ DOTypeNameCompare(const void *p1, const void *p2)
 	}
 
 	/* Usually shouldn't get here, but if we do, sort by OID */
-	return oidcmp(obj1->catId.oid, obj2->catId.oid);
+	return (oidcmp(obj1->catId.oid, obj2->catId.oid) *
+			(getenv("PGTEST_DUMP_FALLBACK_REVERSE") ? -1 : 1));
 }
 
 
diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
index 7d82593..6a22731 100644
--- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl
+++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
@@ -413,8 +413,12 @@ SKIP:
 	# Dump original and restored database for comparison.
 	my $src_dump =
 	  get_dump_for_comparison($oldnode, 'regression', 'src_dump', 1);
-	my $dst_dump =
-	  get_dump_for_comparison($dstnode, 'regression', 'dest_dump', 0);
+	my $dst_dump;
+	{
+		local $ENV{PGTEST_DUMP_FALLBACK_REVERSE} = 1;
+		$dst_dump =
+		  get_dump_for_comparison($dstnode, 'regression', 'dest_dump', 0);
+	}
 
 	compare_files($src_dump, $dst_dump,
 		'dump outputs from original and restored regression databases match');