From 775750fd59ef6f6214d41b187c3f1e7b23961520 Mon Sep 17 00:00:00 2001
From: Jeff Davis <jeff@j-davis.com>
Date: Tue, 5 Nov 2024 16:52:17 -0800
Subject: [PATCH v1] HashAgg: completely rebuild hash tables each iteration.

---
 src/backend/executor/nodeAgg.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c
index 53ead77ece..9b29d67b7d 100644
--- a/src/backend/executor/nodeAgg.c
+++ b/src/backend/executor/nodeAgg.c
@@ -1469,18 +1469,13 @@ build_hash_tables(AggState *aggstate)
 {
 	int			setno;
 
+	MemoryContextReset(aggstate->hash_metacxt);
 	for (setno = 0; setno < aggstate->num_hashes; ++setno)
 	{
 		AggStatePerHash perhash = &aggstate->perhash[setno];
 		long		nbuckets;
 		Size		memory;
 
-		if (perhash->hashtable != NULL)
-		{
-			ResetTupleHashTable(perhash->hashtable);
-			continue;
-		}
-
 		Assert(perhash->aggnode->numGroups > 0);
 
 		memory = aggstate->hash_mem_limit / aggstate->num_hashes;
@@ -2622,8 +2617,7 @@ agg_refill_hash_table(AggState *aggstate)
 
 	/* free memory and reset hash tables */
 	ReScanExprContext(aggstate->hashcontext);
-	for (int setno = 0; setno < aggstate->num_hashes; setno++)
-		ResetTupleHashTable(aggstate->perhash[setno].hashtable);
+	build_hash_tables(aggstate);
 
 	aggstate->hash_ngroups_current = 0;
 
-- 
2.34.1

