diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c new file mode 100644 index dfc3dc4..d698433 *** a/src/backend/access/gin/ginget.c --- b/src/backend/access/gin/ginget.c *************** entryGetItem(GinState *ginstate, GinScan *** 732,739 **** do { ! if (entry->matchResult == NULL || ! entry->offset >= entry->matchResult->ntuples) { entry->matchResult = tbm_iterate(entry->matchIterator); --- 732,741 ---- do { ! while (entry->matchResult == NULL || ! (entry->matchResult->ntuples > 0 && ! entry->offset >= entry->matchResult->ntuples) || ! entry->matchResult->blockno < advancePastBlk) { entry->matchResult = tbm_iterate(entry->matchIterator); *************** entryGetItem(GinState *ginstate, GinScan *** 752,758 **** */ if (entry->matchResult->blockno < advancePastBlk || (entry->matchResult->blockno == advancePastBlk && ! entry->matchResult->offsets[entry->offset] <= advancePastOff)) { entry->offset = entry->matchResult->ntuples; continue; --- 754,761 ---- */ if (entry->matchResult->blockno < advancePastBlk || (entry->matchResult->blockno == advancePastBlk && ! entry->matchResult->ntuples > 0 && ! entry->matchResult->offsets[entry->matchResult->ntuples - 1] <= advancePastOff)) { entry->offset = entry->matchResult->ntuples; continue; *************** entryGetItem(GinState *ginstate, GinScan *** 767,772 **** --- 770,778 ---- entry->offset = 0; } + if (entry->isFinished == TRUE) + break; + if (entry->matchResult->ntuples < 0) { /*