Robiłem takie rzeczy podczas moich migracji:
add_column :statuses, :hold_reason, :string rescue puts "column already added"
ale okazuje się, że chociaż działa to dla SQLite, nie działa dla PostgreSQL . Wydaje się, że jeśli add_column wybuchnie, nawet jeśli wyjątek zostanie przechwycony, transakcja jest martwa i migracja nie może wykonać żadnej dodatkowej pracy.
Czy są jakieś specyficzne sposoby sprawdzenia, czy kolumna lub tabela już istnieje? Jeśli to się nie uda, czy jest jakiś sposób, aby mój blok ratunkowy naprawdę działał?