From: | Peter Geoghegan <pg(at)bowt(dot)ie> |
---|---|
To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | pgsql: Fix btmarkpos/btrestrpos array key wraparound bug. |
Date: | 2023-09-28 23:30:00 |
Message-ID: | E1qm0SG-006XJK-Gy@gemulon.postgresql.org |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix btmarkpos/btrestrpos array key wraparound bug.
nbtree's mark/restore processing failed to correctly handle an edge case
involving array key advancement and related search-type scan key state.
Scans with ScalarArrayScalarArrayOpExpr quals requiring mark/restore
processing (for a merge join) could incorrectly conclude that an
affected array/scan key must not have advanced during the time between
marking and restoring the scan's position.
As a result of all this, array key handling within btrestrpos could skip
a required call to _bt_preprocess_keys(). This confusion allowed later
primitive index scans to overlook tuples matching the true current array
keys. The scan's search-type scan keys would still have spurious values
corresponding to the final array element(s) -- not values matching the
first/now-current array element(s).
To fix, remember that "array key wraparound" has taken place during the
ongoing btrescan in a flag variable stored in the scan's state, and use
that information at the point where btrestrpos decides if another call
to _bt_preprocess_keys is required.
Oversight in commit 70bc5833, which taught nbtree to handle array keys
during mark/restore processing, but missed this subtlety. That commit
was itself a bug fix for an issue in commit 9e8da0f7, which taught
nbtree to handle ScalarArrayOpExpr quals natively.
Author: Peter Geoghegan <pg(at)bowt(dot)ie>
Discussion: https://postgr.es/m/CAH2-WzkgP3DDRJxw6DgjCxo-cu-DKrvjEv_ArkP2ctBJatDCYg@mail.gmail.com
Backpatch: 11- (all supported branches).
Branch
------
REL_16_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/3fa81b62e09befc0e839b2e1ef9ea92ef854a77d
Modified Files
--------------
src/backend/access/nbtree/nbtree.c | 1 +
src/backend/access/nbtree/nbtutils.c | 17 ++++++++++++++++-
src/include/access/nbtree.h | 4 +++-
3 files changed, 20 insertions(+), 2 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2023-09-29 01:34:37 | pgsql: doc: Fix descriptions related to the handling of non-ASCII chara |
Previous Message | Tom Lane | 2023-09-28 18:05:37 | pgsql: Fix checking of index expressions in CompareIndexInfo(). |