Нужно переименовать orders.sum в orders.total, старое имя всех путает. Локально rename_column, и готово, но тимлид сказал, что на проде так нельзя. Почему, если миграция занимает секунду? Rails 8.0, PostgreSQL.
Потому что во время деплоя какое-то время работают и старые процессы, и новые. Старые после миграции полезут в sum, а её уже нет, и все запросы к orders, где она упоминается, начнут падать. Плюс Active Record кэширует список колонок при старте, так что даже там, где вы sum явно не трогаете, вставка у старого процесса сломается. Безопасно это делается в несколько релизов. Сначала добавляете total и пишете в обе колонки, потом переносите данные пачками и переводите чтение на total. Затем просите модель не видеть старую колонку:
class Order < ApplicationRecord
self.ignored_columns += ["sum"]
end
И только следующим релизом удаляете sum. Долго, но откатиться можно в любой момент.
strong_migrations на rename_column ругается и предлагает ровно этот план. Отдельно про перенос: не одним UPDATE на всю таблицу, а через in_batches(of: 10_000) с паузой между пачками, иначе раздуете WAL и реплика отстанет.
И фабрики с фикстурами проверьте. У меня после такого переименования падала куча тестов, где старое имя было прописано руками