From 53bdecfeb44e6f6dcc7f7fcc20d1569f4d01285b Mon Sep 17 00:00:00 2001
From: Mikhail Kot <to@myrrc.dev>
Date: Wed, 3 Sep 2025 22:34:46 +0100
Subject: [PATCH] remove pgstate hash entry if pgstat_init_entry errors with
 OOM

---
 src/backend/utils/activity/pgstat_shmem.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/backend/utils/activity/pgstat_shmem.c b/src/backend/utils/activity/pgstat_shmem.c
index 62de3474453..fffa1e56941 100644
--- a/src/backend/utils/activity/pgstat_shmem.c
+++ b/src/backend/utils/activity/pgstat_shmem.c
@@ -508,7 +508,16 @@ pgstat_get_entry_ref(PgStat_Kind kind, Oid dboid, uint64 objid, bool create,
 		shhashent = dshash_find_or_insert(pgStatLocal.shared_hash, &key, &shfound);
 		if (!shfound)
 		{
-			shheader = pgstat_init_entry(kind, shhashent);
+			PG_TRY();
+			{
+				shheader = pgstat_init_entry(kind, shhashent);
+			}
+			PG_CATCH();
+			{
+				dshash_delete_entry(pgStatLocal.shared_hash, shhashent);
+				PG_RE_THROW();
+			}
+			PG_END_TRY();
 			pgstat_acquire_entry_ref(entry_ref, shhashent, shheader);
 
 			if (created_entry != NULL)
-- 
2.47.2

