https://ru.stackoverflow.com/q/721985/203622
Вот есть таблица с 1000 записей. В ней 9 колонок. На 3 из них есть индексы.
На такой мелочи без разницы. Перезапись такой крохи штука быстрая.
1. Возможно ли дозапись новой колонки в существующую структуру? Или под капотом происходит полное копирование всех данных в новую таблицу (табличное пространство?)
В зависимости от конкретного alter table add column.
Если вы добавляете add column score float default random() - то будем переписывать всю таблицу и перестраивать все существующие индексы.
Если default с константой и у вас pg11 или новее - то обновим в системном каталоге описание таблицы, а саму таблицу трогать не будем.
Если нет default (т.е. null) - то без оглядки на версию базы просто обновим описание таблицы и сами файлы таблицы трогать не будем.
2. Происходит ли пересоздание индексов?
да, если выполняется table rewrite
3. Происходят ли какие-то еще важные для понимания сути работы в БД процессы?
классическая история частых даунтаймов, что для операции нужна эксклюзивная блокировка. То есть для взятие блокировки не должно быть совсем никого, кто эту таблицу трогал в транзакции, начавшейся до alter table. Если у вас в это время работает какая-то аналитика на 10 минут или pg_dump - будут приключения, нужен statement_timeout