Remove faulty nbtree page deletion assertion.

_bt_pagedel only builds a search stack when it needs one to locate the
downlink of the page that it's about to mark half-dead (and when it
doesn't already have one from an earlier sibling deletion that took
place during the same _bt_pagedel call).  _bt_pagedel won't build a
search stack for the page its caller passes whenever it happens to be
one that an earlier interrupted VACUUM left half-dead (since there is no
downlink to remove).  We nevertheless asserted that page deletion could
only build a search stack for that initial caller-passed page.

To fix, remove the assertion, which spuriously failed when a half-dead
leaf page was passed by the _bt_pagedel caller and its right sibling
page was empty/had to be considered for deletion during the same call
(necessitating building a search stack to locate the right sibling's
downlink).

Oversight in commit cd8c73a38, which refactored nbtree page deletion's
INCOMPLETE_SPLIT check.

Author: Peter Geoghegan <[email protected]>
Reported-by: Iliia Khaprov <[email protected]>
Discussion: 
https://postgr.es/m/cafo+o_p5so4mxwq1vecl9+9vggodu11ttwcyq9rdbxnira8...@mail.gmail.com
Backpatch-through: 14

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/1732ab2757af722a71e17160e179ca7f80980778

Modified Files
--------------
src/backend/access/nbtree/nbtpage.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)

Reply via email to