mirror of
https://github.com/postgres/postgres.git
synced 2025-05-13 01:13:08 -04:00
Fix brin index summarizing while vacuuming.
If the number of heap blocks is not multiples of pages per range, the summarizing produces wrong summary information for the last brin index tuple while vacuuming. Problem reported by Tatsuo Ishii and fixed by Amit Langote. Discussion at "[HACKERS] BRIN INDEX value (message id :20150903.174935.1946402199422994347.t-ishii@sraoss.co.jp) Backpatched to 9.5 in which brin index was added.
This commit is contained in:
parent
c5454f99c4
commit
c39f5674df
@ -934,12 +934,13 @@ terminate_brin_buildstate(BrinBuildState *state)
|
||||
*/
|
||||
static void
|
||||
summarize_range(IndexInfo *indexInfo, BrinBuildState *state, Relation heapRel,
|
||||
BlockNumber heapBlk)
|
||||
BlockNumber heapBlk, BlockNumber heapNumBlks)
|
||||
{
|
||||
Buffer phbuf;
|
||||
BrinTuple *phtup;
|
||||
Size phsz;
|
||||
OffsetNumber offset;
|
||||
BlockNumber scanNumBlks;
|
||||
|
||||
/*
|
||||
* Insert the placeholder tuple
|
||||
@ -960,8 +961,10 @@ summarize_range(IndexInfo *indexInfo, BrinBuildState *state, Relation heapRel,
|
||||
* by transactions that are still in progress, among other corner cases.
|
||||
*/
|
||||
state->bs_currRangeStart = heapBlk;
|
||||
scanNumBlks = heapBlk + state->bs_pagesPerRange <= heapNumBlks ?
|
||||
state->bs_pagesPerRange : heapNumBlks - heapBlk;
|
||||
IndexBuildHeapRangeScan(heapRel, state->bs_irel, indexInfo, false, true,
|
||||
heapBlk, state->bs_pagesPerRange,
|
||||
heapBlk, scanNumBlks,
|
||||
brinbuildCallback, (void *) state);
|
||||
|
||||
/*
|
||||
@ -1066,7 +1069,7 @@ brinsummarize(Relation index, Relation heapRel, double *numSummarized,
|
||||
pagesPerRange);
|
||||
indexInfo = BuildIndexInfo(index);
|
||||
}
|
||||
summarize_range(indexInfo, state, heapRel, heapBlk);
|
||||
summarize_range(indexInfo, state, heapRel, heapBlk, heapNumBlocks);
|
||||
|
||||
/* and re-initialize state for the next range */
|
||||
brin_memtuple_initialize(state->bs_dtuple, state->bs_bdesc);
|
||||
|
Loading…
x
Reference in New Issue
Block a user