我正在考虑将Rails应用程序移动到Heroku。
通常,我向所有FK添加带有ON DELETE行为的FK约束。到目前为止,我已经通过编写原始SQL来添加约束来完成此操作,因为Rails迁移不提供这样做的方法。
我还在需要的地方添加了UNIQUE键。
如果我搬到Heroku,我仍然能够以这种方式添加约束吗?
提出这个问题的另一种方法是,我是否可以使用Heroku直接访问我的数据库,还是仅限于我在迁移中可以做的事情?
答案 0 :(得分:1)
您可以使用connection.execute
在迁移中执行所需的任何SQL,例如:
def up
connection.execute(%q{
alter table t add constraint c check (x in ('a', 'b', 'c'))
})
end
def down
connection.execute('alter table t drop constraint c')
end
如果您不想通过原始SQL管理FK,也可以使用foreigner为迁移添加适当的FK支持,schema.rb
。
您可以使用:unique => true
add_index
选项来获取唯一约束/索引。
我已经完成了所有这些,甚至添加了函数(SQL和Pl / pgSQL)和触发器到Heroku的专用PostgreSQL数据库。我不确定共享数据库支持多少,但肯定会有独特的索引,我很确定FK和CHECK也可用。