Комментарии 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.
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…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Rails и схемы Postgres