pgsql: Prevent premature nbtree array advancement. - Mailing list pgsql-committers

From Peter Geoghegan
Subject pgsql: Prevent premature nbtree array advancement.
Date
Msg-id E1uCkKE-000eri-1f@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Prevent premature nbtree array advancement.

nbtree array index scans could fail to return matching tuples in rare
cases where the missed tuples cover key space that the scan's arrays
incorrectly indicate has already been read.  These cases involved nearby
tuples with NULL values that were evaluated using a skip array key while
in pstate.forcenonrequired mode.

To fix, prevent forcenonrequired mode from prematurely advancing the
scan's array keys beyond key space that the scan has yet to read tuples
from: reset the scan's array keys (to the first elements in the current
scan direction) before the _bt_checkkeys call for pstate.finaltup.  That
way _bt_checkkeys starts from a clean slate, which ensures that it will
call _bt_advance_array_keys (while passing it sktrig_required=true).
This reliably restores the invariant that the scan's arrays always
accurately track its progress through the index's key space (at least
when the scan is "between pages").

Oversight in commit 8a510275, which optimized nbtree search scan key
comparisons.

Author: Peter Geoghegan <pg@bowt.ie>
Reviewed-By: Mark Dilger <mark.dilger@enterprisedb.com>
Discussion: https://postgr.es/m/CAH2-WzmodSE+gpTd1CRGU9ez8ytyyDS+Kns2r9NzgUp1s56kpw@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/5f4d98d4f3718cf7a0597c37f3ee4a4485de6ef8

Modified Files
--------------
src/backend/access/nbtree/nbtsearch.c |  8 ++++++-
src/backend/access/nbtree/nbtutils.c  | 42 ++++++++++++++++++++++++++---------
2 files changed, 39 insertions(+), 11 deletions(-)


pgsql-committers by date:

Previous
From: Peter Geoghegan
Date:
Subject: pgsql: nbtree: tighten up array recheck rules.
Next
From: Nathan Bossart
Date:
Subject: pgsql: Remove pg_replication_origin's TOAST table.