Skip to content

Commit bf14575

Browse files
committed
Fix tuple counting in SP-GiST index build.
Count the number of tuples in the index honestly, instead of assuming that it's the same as the number of tuples in the heap. (It might be different if the index is partial.) Back-patch to all supported versions. Tomas Vondra Discussion: https://postgr.es/m/3b3d8eac-c709-0d25-088e-b98339a1b28a@2ndquadrant.com
1 parent 76e2b5a commit bf14575

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/backend/access/spgist/spginsert.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
typedef struct
3333
{
3434
SpGistState spgstate; /* SPGiST's working state */
35+
int64 indtuples; /* total number of tuples indexed */
3536
MemoryContext tmpCtx; /* per-tuple temporary context */
3637
} SpGistBuildState;
3738

@@ -59,6 +60,9 @@ spgistBuildCallback(Relation index, HeapTuple htup, Datum *values,
5960
MemoryContextReset(buildstate->tmpCtx);
6061
}
6162

63+
/* Update total tuple count */
64+
buildstate->indtuples += 1;
65+
6266
MemoryContextSwitchTo(oldCtx);
6367
MemoryContextReset(buildstate->tmpCtx);
6468
}
@@ -132,6 +136,7 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo)
132136
*/
133137
initSpGistState(&buildstate.spgstate, index);
134138
buildstate.spgstate.isBuild = true;
139+
buildstate.indtuples = 0;
135140

136141
buildstate.tmpCtx = AllocSetContextCreate(CurrentMemoryContext,
137142
"SP-GiST build temporary context",
@@ -145,7 +150,8 @@ spgbuild(Relation heap, Relation index, IndexInfo *indexInfo)
145150
SpGistUpdateMetaPage(index);
146151

147152
result = (IndexBuildResult *) palloc0(sizeof(IndexBuildResult));
148-
result->heap_tuples = result->index_tuples = reltuples;
153+
result->heap_tuples = reltuples;
154+
result->index_tuples = buildstate.indtuples;
149155

150156
return result;
151157
}

0 commit comments

Comments
 (0)