From 4078ce65a0f7197180a9be2c6460ea4bf909bd98 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 16 Mar 2021 15:42:20 -0400 Subject: [PATCH] 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 --- contrib/amcheck/verify_heapam.c | 8 ++++---- src/bin/pg_amcheck/t/004_verify_heapam.pl | 3 +-- 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)