mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-01 12:51:24 +02:00
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:
parent
6b1c5cacec
commit
265ea56785
@ -540,6 +540,19 @@ gist_indexsortbuild_pagestate_flush(GISTBuildState *state,
|
|||||||
/* Re-initialize the page buffer for next page on this level. */
|
/* Re-initialize the page buffer for next page on this level. */
|
||||||
pagestate->page = palloc(BLCKSZ);
|
pagestate->page = palloc(BLCKSZ);
|
||||||
gistinitpage(pagestate->page, isleaf ? F_LEAF : 0);
|
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
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user