From 555f6037f5caa09d95767d40d966e677f2a3fa71 Mon Sep 17 00:00:00 2001
From: Maxim Orlov <orlovmg@gmail.com>
Date: Wed, 22 Nov 2023 19:14:03 +0300
Subject: [PATCH] Add warning if datfrozenxid or datminmxid is not set due to
 bogus relfrozenxid or relminmxid.

Author: Maxim Orlov <orlovmg@gmail.com>
---
 src/backend/commands/vacuum.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 8bdbee6841..00712e7adb 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -1660,6 +1660,13 @@ vac_update_datfrozenxid(void)
 			if (TransactionIdPrecedes(lastSaneFrozenXid, classForm->relfrozenxid))
 			{
 				bogus = true;
+				ereport(WARNING,
+						(errcode(ERRCODE_DATA_CORRUPTED),
+						 errmsg("bogus relfrozenxid %llu for relation \"%s\"",
+								(unsigned long long) classForm->relfrozenxid,
+								NameStr(classForm->relname)),
+						 errhint("Relfrozenxid seem to be in the future, last sane xact is %llu.",
+								 (unsigned long long) lastSaneFrozenXid)));
 				break;
 			}
 
@@ -1674,6 +1681,13 @@ vac_update_datfrozenxid(void)
 			if (MultiXactIdPrecedes(lastSaneMinMulti, classForm->relminmxid))
 			{
 				bogus = true;
+				ereport(WARNING,
+						(errcode(ERRCODE_DATA_CORRUPTED),
+						 errmsg("bogus relminmxid %llu for relation \"%s\"",
+								(unsigned long long) classForm->relminmxid,
+								NameStr(classForm->relname)),
+						 errhint("Relminmxid seem to be in the future, last sane multixact is %llu. Consider running vacuumdb.",
+								 (unsigned long long) lastSaneMinMulti)));
 				break;
 			}
 
-- 
2.42.0

