> На индексе - отнюдь не всегда.
Освобождённые (пустые)
блоки индекса всегда доступны для повторного использования, насколько я знаю.
Вы можете привести какой-то случай, когда это не так?
> и вот как использовать место между двумя имеющимися значениями
Вставив данные туда (и, возможно, перебалансировав дерево), как обычно. Т.е. тут может либо быть использовано свободное место на странице, либо появится куда больше свободного места и новая страница.
> А удаление данных - где-нибудь посередине этих значений, и толку от того, что место освободилось?
Никакого, и я об этом и не писал. И b-tree так и должно себя вести в этих случаях (то, которое "из учебника", может сливать страницы, но PostgreSQL этого не делает).
> И да, я на собесах, да и от коллег неоднократно слыхал про распухающие индексы
Индексы и должны "распухать" (вопрос может быть в том,
насколько) — это их нормальное поведение почти во всех случаях.
Т.е. чаще всего их "сжатие" (при сохранении той же нагрузки) — это бестолковое бегание кругами. ;)
> а вот индексы пухнут просто безбожно ... А я с подобным поведением, к сожалению, не сталкивался.
"Столкнуться" очень просто, например:
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=81c2bbdc4b5e20d5195a8fa1e3c6e35e ;)