Есть ли способ добавить столбец ненулевого типа в таблицу Postgresql, не удваивая его размер на диске? Например, если у меня есть таблица с определенными столбцами, и я хочу добавить столбец, я бы сделал следующее:
alter table my_table add new_column int
update table my_table set new_column = 0
alter table my_table alter column new_column set not null
Это фактически удваивает пространство, выделенное для таблицы, из-за того, как работает Postgresql. Обновления создают новые кортежи, которые будут помечены для повторного использования после завершения этой транзакции и выполнения своей работы вакуумом. Если таблица имеет большой размер (т. Е. Несколько миллионов строк), но очень медленно растет или почти постоянна по размеру, эти строки никогда не будут использоваться повторно, и только «полное заполнение пылесосом» или полное резервное копирование и восстановление базы данных освободит место на диске. Есть ли способ автоматически добавить столбец с некоторым значением по умолчанию, но без этого поведения? Например, если есть способ заблокировать таблицу и выполнить обновление, тогда в этом случае не будет необходимости в MVCC.