2012-06-05 53 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也可用。