Я хочу добавить индекс в производственную базу данных. К счастью, мы запускаем Postgres, что прекрасно позволяет одновременное индексирование, поэтому мы можем добавить индекс без простоев. Ловушки-параллельные индексы не могут быть добавлены из транзакции, а миграции рельсов переносят все внутри транзакции.Как остановить миграцию Rails 3.1 из транзакции?
К счастью, есть что-то похожее на очень простое решение: перезапишите закрытый метод ActiveRecord :: Migration ddl_transaction, как explained here.
class IndexUsersEmails < ActiveRecord::Migration
def ddl_transaction(&block)
block.call # do not start a transaction
end
def self.up
execute "CREATE INDEX CONCURRENTLY index_users_on_email ON users(email)"
end
end
Проблема в том, что она не работает в Rails 3.1. Я делаю именно то, что делает код в Gist, и рельсы, похоже, полностью игнорируют его. Любые идеи о том, куда идти с этим?
Вы пробовали изменить определение метода, так что это метод класса? например 'def self.ddl_transaction (& block) ...' –