Backpatch tuplesort.c assertion.
authorPeter Geoghegan <pg@bowt.ie>
Wed, 29 Jul 2020 23:00:50 +0000 (16:00 -0700)
committerPeter Geoghegan <pg@bowt.ie>
Wed, 29 Jul 2020 23:00:50 +0000 (16:00 -0700)
Backpatch an assertion (that was originally added to Postgres 12 by
commit dd299df8189) that seems broadly useful.  The assertion can detect
violations of the HOT invariant (i.e. no two index tuples can point to
the same heap TID) when CREATE INDEX somehow incorrectly allows that to
take place.

For example, a IndexBuildHeapScan/heapam_index_build_range_scan bug
might result in two tuples that both point to the same heap TID.  If
these two tuples also happen to be duplicates, the assertion will fail.

Discussion: https://postgr.es/m/CAH2-WzmBxu4o=pMsniur+bwHqCGCmV_AOLkuK6BuU7ngA6evqw@mail.gmail.com
Backpatch: 9.5-11 only

src/backend/utils/sort/tuplesort.c

index 47efd2e3b80c66707e286ed6056144165361a09f..147889177faace1fe8d0904a06059b8e13796ba6 100644 (file)
@@ -4536,6 +4536,9 @@ comparetup_index_btree(const SortTuple *a, const SortTuple *b,
            return (pos1 < pos2) ? -1 : 1;
    }
 
+   /* ItemPointer values should never be equal */
+   Assert(false);
+
    return 0;
 }
 
@@ -4585,6 +4588,9 @@ comparetup_index_hash(const SortTuple *a, const SortTuple *b,
            return (pos1 < pos2) ? -1 : 1;
    }
 
+   /* ItemPointer values should never be equal */
+   Assert(false);
+
    return 0;
 }