diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c
index 2cfccdedcf..5799a96d6c 100644
--- a/src/backend/access/gin/ginget.c
+++ b/src/backend/access/gin/ginget.c
@@ -35,6 +35,21 @@ typedef struct pendingPosition
 } pendingPosition;
 
 
+static char *
+printEntryRes(GinScanKey key)
+{
+	static char buf[101];
+	int i;
+
+	for (i = 0; i < key->nentries && i < 100; i++)
+	{
+		buf[i] = '0' + key->entryRes[i];
+	}
+	buf[i] = '\0';
+
+	return buf;
+}
+
 /*
  * Goes to the next page if current offset is outside of bounds
  */
@@ -513,6 +528,8 @@ startScanKey(GinState *ginstate, GinScanOpaque so, GinScanKey key)
 	key->recheckCurItem = false;
 	key->isFinished = false;
 
+	elog(LOG, "GINBUG: startScanKey called: excludeOnly %d nentries %d", key->excludeOnly, key->nentries);
+
 	/*
 	 * Divide the entries into two distinct sets: required and additional.
 	 * Additional entries are not enough for a match alone, without any items
@@ -557,13 +574,21 @@ startScanKey(GinState *ginstate, GinScanOpaque so, GinScanKey key)
 
 		for (i = 0; i < key->nentries - 1; i++)
 		{
+			GinTernaryValue	res;
+			char	   *debugkey;
+
 			/* Pass all entries <= i as FALSE, and the rest as MAYBE */
 			for (j = 0; j <= i; j++)
 				key->entryRes[entryIndexes[j]] = GIN_FALSE;
 			for (j = i + 1; j < key->nentries; j++)
 				key->entryRes[entryIndexes[j]] = GIN_MAYBE;
 
-			if (key->triConsistentFn(key) == GIN_FALSE)
+			debugkey = printEntryRes(key);
+			res = key->triConsistentFn(key);
+
+			elog(LOG, "GINBUG: called triConsistentFn(%s) in startScanKey: %d %d", debugkey, res, key->recheckCurItem);
+
+			if (res == GIN_FALSE)
 				break;
 		}
 		/* i is now the last required entry. */
@@ -1182,8 +1207,11 @@ keyGetItem(GinState *ginstate, MemoryContext tempCtx, GinScanKey key,
 	if (haveLossyEntry)
 	{
 		/* Have lossy-page entries, so see if whole page matches */
+		char *debugkey = printEntryRes(key);
 		res = key->triConsistentFn(key);
 
+		elog(LOG, "GINBUG: called triConsistentFn(%s) for lossy entry: %d %d", debugkey, res, key->recheckCurItem);
+
 		if (res == GIN_TRUE || res == GIN_MAYBE)
 		{
 			/* Yes, so clean up ... */
@@ -1230,8 +1258,14 @@ keyGetItem(GinState *ginstate, MemoryContext tempCtx, GinScanKey key,
 			key->entryRes[i] = GIN_FALSE;
 	}
 
+	{
+	char *debugkey = printEntryRes(key);
+
 	res = key->triConsistentFn(key);
 
+	elog(LOG, "GINBUG: called triConsistentFn(%s): %d %d", debugkey, res, key->recheckCurItem);
+	}
+
 	switch (res)
 	{
 		case GIN_TRUE:
@@ -1888,8 +1922,14 @@ scanPendingInsert(IndexScanDesc scan, TIDBitmap *tbm, int64 *ntids)
 		for (i = 0; i < so->nkeys; i++)
 		{
 			GinScanKey	key = so->keys + i;
+			char *debugkey = printEntryRes(key);
+			bool res;
+
+			res = key->boolConsistentFn(key);
+
+			elog(LOG, "GINBUG: called boolConsistentFn, key %d %s: %d %d", i, debugkey, res, key->recheckCurItem);
 
-			if (!key->boolConsistentFn(key))
+			if (!res)
 			{
 				match = false;
 				break;
