From 5e07e0a333194a4ed6ebea6b8a0d254ea0f6a54d Mon Sep 17 00:00:00 2001
From: Justin Pryzby <pryzbyj@telsasoft.com>
Date: Mon, 20 Jan 2020 14:28:45 -0600
Subject: [PATCH v11 3/6] Add vacrelstats.stage and distinct context message

---
 src/backend/access/heap/vacuumlazy.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index a05c38a..211d681 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -295,6 +295,7 @@ typedef struct LVRelStats
 	char		*relname;
 	char 		*relnamespace;
 	BlockNumber blkno;
+	int			stage;	/* 0: scan heap; 1: vacuum heap */
 } LVRelStats;
 
 /* A few variables that don't seem worth passing around as parameters */
@@ -902,6 +903,7 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
 	vacrelstats->relnamespace = get_namespace_name(RelationGetNamespace(onerel));
 	vacrelstats->relname = relname;
 	vacrelstats->blkno = InvalidBlockNumber; /* Not known yet */
+	vacrelstats->stage = 0;
 
 	errcallback.callback = vacuum_error_callback;
 	errcallback.arg = (void *) vacrelstats;
@@ -1838,6 +1840,8 @@ lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats)
 	/* vacrelstats->relnamespace already set */
 	/* vacrelstats->relname already set */
 	vacrelstats->blkno = InvalidBlockNumber; /* Not known yet */
+	vacrelstats->stage = 1;
+
 	errcallback.callback = vacuum_error_callback;
 	errcallback.arg = (void *) vacrelstats;
 	errcallback.previous = error_context_stack;
@@ -3461,6 +3465,10 @@ static void
 vacuum_error_callback(void *arg)
 {
 	LVRelStats *cbarg = arg;
-	errcontext("while scanning block %u of relation \"%s.%s\"",
-			cbarg->blkno, cbarg->relnamespace, cbarg->relname);
-}
+
+	if (cbarg->stage == 0)
+		errcontext(_("while scanning block %u of relation \"%s.%s\""),
+				cbarg->blkno, cbarg->relnamespace, cbarg->relname);
+	else if (cbarg->stage == 1)
+		errcontext(_("while vacuuming block %u of relation \"%s.%s\""),
+				cbarg->blkno, cbarg->relnamespace, cbarg->relname);
-- 
2.7.4

