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 ------ REL_16_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/b87cc7a3eeb0561eff8842189142dba5a90ad01c Modified Files -------------- src/backend/access/nbtree/nbtpage.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
