summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2021-03-16 15:42:20 -0400
committerRobert Haas <rhaas@postgresql.org>2021-03-16 15:42:50 -0400
commit4078ce65a0f7197180a9be2c6460ea4bf909bd98 (patch)
tree16f2300ce31863129886893cdd30866f8ffc4e3a
parentc6fc50cb40285141fad401321ae21becbaea1c59 (diff)
Fix a confusing amcheck corruption message.
Don't complain about the last TOAST chunk number being different from what we expected if there are no TOAST chunks at all. In such a case, saying that the final chunk number is 0 is not really accurate, and the fact the value is missing from the TOAST table is reported separately anyway. Mark Dilger Discussion: http://postgr.es/m/AA5506CE-7D2A-42E4-A51D-358635E3722D@enterprisedb.com
-rw-r--r--contrib/amcheck/verify_heapam.c8
-rw-r--r--src/bin/pg_amcheck/t/004_verify_heapam.pl3
2 files changed, 5 insertions, 6 deletions
diff --git a/contrib/amcheck/verify_heapam.c b/contrib/amcheck/verify_heapam.c
index 49f5ca0ef2c..e614c12a14a 100644
--- a/contrib/amcheck/verify_heapam.c
+++ b/contrib/amcheck/verify_heapam.c
@@ -1100,14 +1100,14 @@ check_tuple_attribute(HeapCheckContext *ctx)
check_toast_tuple(toasttup, ctx);
ctx->chunkno++;
}
- if (ctx->chunkno != (ctx->endchunk + 1))
- report_corruption(ctx,
- psprintf("final toast chunk number %u differs from expected value %u",
- ctx->chunkno, (ctx->endchunk + 1)));
if (!found_toasttup)
report_corruption(ctx,
psprintf("toasted value for attribute %u missing from toast table",
ctx->attnum));
+ else if (ctx->chunkno != (ctx->endchunk + 1))
+ report_corruption(ctx,
+ psprintf("final toast chunk number %u differs from expected value %u",
+ ctx->chunkno, (ctx->endchunk + 1)));
systable_endscan_ordered(toastscan);
return true;
diff --git a/src/bin/pg_amcheck/t/004_verify_heapam.pl b/src/bin/pg_amcheck/t/004_verify_heapam.pl
index 9f7114cd622..16574cb1f86 100644
--- a/src/bin/pg_amcheck/t/004_verify_heapam.pl
+++ b/src/bin/pg_amcheck/t/004_verify_heapam.pl
@@ -296,7 +296,7 @@ close($file)
$node->start;
# Ok, Xids and page layout look ok. We can run corruption tests.
-plan tests => 20;
+plan tests => 19;
# Check that pg_amcheck runs against the uncorrupted table without error.
$node->command_ok(['pg_amcheck', '-p', $port, 'postgres'],
@@ -489,7 +489,6 @@ for (my $tupidx = 0; $tupidx < ROWCOUNT; $tupidx++)
$header = header(0, $offnum, 2);
push @expected,
- qr/${header}final toast chunk number 0 differs from expected value \d+/,
qr/${header}toasted value for attribute 2 missing from toast table/;
}
elsif ($offnum == 14)