From cf0b6922f510a454a8bbe48008582d26ef1946d9 Mon Sep 17 00:00:00 2001
From: Justin Pryzby <pryzbyj@telsasoft.com>
Date: Mon, 20 Jan 2020 14:28:45 -0600
Subject: [PATCH v13 3/5] 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 9d9d342..8b053a7 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -292,6 +292,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 */
@@ -877,6 +878,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;
@@ -1806,6 +1808,8 @@ lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats)
 	 * ->relnamespace and ->relname are 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;
@@ -3421,6 +3425,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

