2012-06-05 54 views
0

我在考虑将Rails应用移植到Heroku。Heroku是否支持外键和唯一约束?

一般情况下,我将ON DELETE行为的FK约束添加到所有FK中。到目前为止,我已经通过编写原始SQL来添加约束,因为Rails Migrations没有提供这种方法。

我还在需要的地方添加UNIQUE键。

如果我搬到Heroku,我仍然可以通过这种方式添加约束吗?

提出这个问题的另一种方法是,我可以直接访问我的数据库与Heroku,或者我仅限于我可以在迁移中做什么?

回答

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 

您还可以使用foreigner适当的FK支持添加到您的迁移和schema.rb,如果你不希望管理您的FK通过原始SQL。

您可以使用:unique => true选项add_index来获取唯一的约束/索引。

我已经完成了所有这些甚至添加了函数(包括SQL和Pl/pgSQL)和触发器到Heroku的专用PostgreSQL数据库。我不确定共享数据库有多少支持,但是独特的索引肯定会有,并且我很确定FK和CHECK也可用。