В приложении Rails с поддержкой Postgres, запущенном на Heroku, я пытаюсь добавить логический столбец, для которого по умолчанию установлено значение false, а для нуля установлено значение false (NOT NULL).
Миграция занимает часы за часом (на самом деле около 15 или около того таких полей необходимо добавить). Использование памяти идет через крышу (5-6 ГБ или более). Я думаю, это потому, что Postgres упаковывает миграцию в транзакцию и пытается загрузить всю таблицу в память, чтобы она могла откатиться при сбое.
Без поля по умолчанию или NOT NULL столбец добавляется в мгновение ока.
В качестве временного решения я добавляю новый столбец без каких-либо ограничений, обновляю все записи ложным значением по умолчанию в пакетах по 1000 записей, а затем, наконец, изменяю столбец, чтобы иметь требования по умолчанию и NOT NULL.
Теперь миграция занимает около 3-4 часов и использует только около 100 МБ ОЗУ.
Есть ли лучшее решение?