Comments 6
Первые 2 шага (смена типа и пересоздание табицы) можно объединить, это автоматизировано, например, в https://github.com/comagic/transparent_alter_type
Приложение работает с БД как обычно, но когда (почти) все изменения захвачены и применены к новой таблице - берётся короткая эксклюзивная блокировка, доприменяются изменения и происходит подмена таблиц.
По поводу vacuum - есть утилита pg-repack (https://github.com/reorg/pg_repack) которая обслуживает таблицы без долгого глобального лока. Она оттестирована, и лучше использовать её вместо своих велосипедов.
С партиционированием тоже не всё так просто. От версии к версии конечно становится лучше, но партиционированные таблицы имеют ограничения по уникальным констрейнам, которые должны включать ключ партиционирования. А при неправильно выбранном ключе запросы становятся дольше, так как опрашиваются сразу все партиции.
По поводу вакуумма - тут показан лишь один из способов, вполне можно использовать сторонние утилиты. Основная идея - сразу не брать сторонний инструмент который возможно будет оверхедом, а сделать тюнинг текущего процесса вакумации и убить "жировички". Зачастую агрессивный автовакуум - вполне может вас выручить.
А про партиционирование, да это сложная вещь, и ее нужно применять с умом, сегодня у тебя не было уникального индекса на какое то поле - а завтра он появится(или еще хуже исчезнет) и все, твой хитрый план выпросить премию у СТО за оптимизацию летит в тартатары. Поэтому это ни в коем случае не рекомендация к применению, это лишь один вариант из мультивселенной безумия.
Облегчаем жизнь PostgreSQL таблице под нагрузкой