Как стать автором
Обновить

Комментарии 12

class CreateMyRelation < ActiveRecord::Migration
  def up
    execute "CREATE SCHEMA myschema"
    create_table 'myschema.my_relations' do |t|
      t.string :test_field
      t.timestamps
    end
  end

  def down
    drop_table 'myschema.my_relations'
    execute "DROP SCHEMA myschema"
  end
end


Вполне работает. А в целом поищите на тему rails + postgresql schemas + multi-tenant
Да, перемудрил, я вроде и пытался в транзацию запихать создание схемы, но видимо уже была ночь :) Спасибо
А где здесь транзакции? В миграциях их никогда не было на сколько я знаю. Любой фейл не вызывает откат. Если create_table не будет успешен, то схема не удалится.
Postgresql поддерживает ddl транзакции. При фейле откатится все вместе
что-то я не замечал? В какой версии рельсов такое работает? (при стандартных миграциях)
В документации на 2.2 пишут
Transactional migrations change this by wrapping migration steps in a DDL transaction, so that if any of them fail, the entire migration is undone. In Rails 2.2, transactional migrations are supported on PostgreSQL out of the box.
Ага, значит я наверное не замечал. Наверное откатов в мускуле нет. Потому что были проблемы с частично выполненными миграциями.
Верно, просто сообщение об ошибке
rake aborted!
An error has occurred, this and all later migrations canceled:
PG::Error: ERROR:  schema "app" does not exist

ввело меня в заблуждение и мне показалось что все миграции выполняются в рамках одной транзакции и поэтому я пытался как то с этим бороться. Сам себе придумал проблему.
Тут всего лишь сказано что миграция упала и все последующие (если есть) я делать не буду.
Найти бы статью, в которой описано, что надо знать при переходе с MySQL на Postgresql…
Можете попробовать мигрировать с помощью Taps gem, если у вас Rails.
Спасибо, гем видел в railscasts. Вообще, наверное надо будет почитать официальный мануал на сайте.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории