Set right-links during sorted GiST index build.

This is not strictly necessary, as the right-links are only needed by
scans that are concurrent with page splits, and neither scans or page
splits can happen during sorted index build. But it seems like a good
idea to set them anyway, if we e.g. want to add a check to amcheck in
the future to verify that the chain of right-links is complete.

Author: Andrey Borodin
Discussion: https://www.postgresql.org/message-id/4D68C21F-9FB9-41DA-B663-FDFC8D143788%40yandex-team.ru
This commit is contained in:
Heikki Linnakangas 2020-10-01 11:10:43 +03:00
parent 6b1c5cacec
commit 265ea56785
1 changed files with 13 additions and 0 deletions

View File

@ -540,6 +540,19 @@ gist_indexsortbuild_pagestate_flush(GISTBuildState *state,
/* Re-initialize the page buffer for next page on this level. */
pagestate->page = palloc(BLCKSZ);
gistinitpage(pagestate->page, isleaf ? F_LEAF : 0);
/*
* Set the right link to point to the previous page. This is just for
* debugging purposes: GiST only follows the right link if a page is split
* concurrently to a scan, and that cannot happen during index build.
*
* It's a bit counterintuitive that we set the right link on the new page
* to point to the previous page, and not the other way round. But GiST
* pages are not ordered like B-tree pages are, so as long as the
* right-links form a chain through all the pages in the same level, the
* order doesn't matter.
*/
GistPageGetOpaque(pagestate->page)->rightlink = blkno;
}
static void