Thread: pgsql: Fix GiST buffering build bug, which caused "failed to re-find pa
pgsql: Fix GiST buffering build bug, which caused "failed to re-find pa
From
Heikki Linnakangas
Date:
Fix GiST buffering build bug, which caused "failed to re-find parent" errors. We use a hash table to track the parents of inner pages, but when inserting to a leaf page, the caller of gistbufferinginserttuples() must pass a correct block number of the leaf's parent page. Before gistProcessItup() descends to a child page, it checks if the downlink needs to be adjusted to accommodate the new tuple, and updates the downlink if necessary. However, updating the downlink might require splitting the page, which might move the downlink to a page to the right. gistProcessItup() doesn't realize that, so when it descends to the leaf page, it might pass an out-of-date parent block number as a result. Fix that by returning the block a tuple was inserted to from gistbufferinginserttuples(). This fixes the bug reported by Zdeněk Jílovec. Branch ------ REL9_2_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/d6524697dba5967c7951c9a47107054660804900 Modified Files -------------- src/backend/access/gist/gist.c | 33 ++++++++++++++++++++++++++------- src/backend/access/gist/gistbuild.c | 19 +++++++++++++------ src/include/access/gist_private.h | 3 ++- 3 files changed, 41 insertions(+), 14 deletions(-)