From fb27aeab3ec25061ce02cb0f9ca3edf9a0ee328f Mon Sep 17 00:00:00 2001
From: Vinod Sridharan <vsridh90@gmail.com>
Date: Thu, 12 Mar 2026 19:32:02 +0000
Subject: [PATCH v1] Check for interrupts during gin insert. The GIN index
 extractEntries can produce a lot of terms for a given tuple. This is true for
 opclasses like json/jsonb which can have a term per path & value. During the
 build phase of the gin index, we do check for interrupts and ensure that we
 can bail if there are many entries generated. However, during the insert
 phase, this check doesn't exist and we continue on even if there was a
 cancellation. This adds a check for cancellation in between terms. This seems
 like a safe place to do it since at this point, we aren't in the middle of
 modifiying the index tree.

---
 src/backend/access/gin/gininsert.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c
index c7e38dbe193..97cea5f7d4e 100644
--- a/src/backend/access/gin/gininsert.c
+++ b/src/backend/access/gin/gininsert.c
@@ -850,8 +850,12 @@ ginHeapTupleInsert(GinState *ginstate, OffsetNumber attnum,
 								&nentries, &categories);
 
 	for (i = 0; i < nentries; i++)
+	{
+		/* there could be many entries, so be willing to abort here */
+		CHECK_FOR_INTERRUPTS();
 		ginEntryInsert(ginstate, attnum, entries[i], categories[i],
 					   item, 1, NULL);
+	}
 }
 
 bool
-- 
2.43.0

