Como você roda uma migration numa tabela grande sem downtime?
Assuma que a tabela fica bloqueada durante o statement, e planeje a mudança para que isso não aconteça. Adicione colunas como nullable sem um default, faça o backfill em lotes fora da migration, adicione índices de forma concorrente, e só depois adicione a restrição. Renomear e remover são os casos perigosos porque código antigo continua rodando durante o deploy — faça isso em duas releases com uma escrita dupla no meio.