Я делал такие вещи в своих миграциях:
add_column :statuses, :hold_reason, :string rescue puts "column already added"
но получается, что , хотя это работает для SQLite, оно не работает для PostgreSQL . Похоже, что если add_column взрывается, , даже если исключение перехвачено, транзакция не работает, и поэтому миграция не может выполнять дополнительную работу.
Существуют ли какие-либо не относящиеся к БД способы проверки того, существует ли уже столбец или таблица? В противном случае, есть ли способ заставить мой спасательный блок действительно работать?