我正在考虑将 Rails 应用程序移至 Heroku。
通常,我将具有 ON DELETE 行为的 FK 约束添加到所有 FK。到目前为止,我已经通过编写原始 SQL 来添加约束来做到这一点,因为 Rails 迁移没有提供这样做的方法。
我还在需要的地方添加了 UNIQUE 键。
如果我搬到 Heroku,我还能以这种方式添加约束吗?
提出这个问题的另一种方法是,我是否可以使用 Heroku 直接访问我的数据库,或者我是否仅限于在迁移中可以做的事情?
我正在考虑将 Rails 应用程序移至 Heroku。
通常,我将具有 ON DELETE 行为的 FK 约束添加到所有 FK。到目前为止,我已经通过编写原始 SQL 来添加约束来做到这一点,因为 Rails 迁移没有提供这样做的方法。
我还在需要的地方添加了 UNIQUE 键。
如果我搬到 Heroku,我还能以这种方式添加约束吗?
提出这个问题的另一种方法是,我是否可以使用 Heroku 直接访问我的数据库,或者我是否仅限于在迁移中可以做的事情?
您可以使用 执行迁移中所需的任何 SQL connection.execute
,例如:
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
获取唯一的约束/索引。
我已经完成了所有这些工作,甚至在 Heroku 的专用 PostgreSQL 数据库中添加了函数(SQL 和 Pl/pgSQL)和触发器。我不确定共享数据库支持多少,但唯一索引肯定会支持,而且我很确定 FK 和 CHECK 也将可用。