Rails模型关联但不同的数据库

时间:2012-05-07 12:34:41

标签: ruby-on-rails-3 activerecord associations postgresql-9.1 rails-postgresql

我正在构建一个使用mysql和postgres数据库的应用程序。由于这个应用程序是基于位置的,我使用postgres因为postgis。 Postgres只有一个数据库Places,而mysql包含所有其他数据库。在开发过程中,我在各种模型中建立了一些关联,包括Place模型。但正如我所知,由于数据库不同,关联的Join查询失败。

我的想法是仅将所有表格移到Postgres数据库中。因此我对MySQL没有任何特殊需求。

但是从MySQL迁移到Postgres是我的最后选择。我想知道是否有任何方法可以使位于不同数据库的模型之间的关联无缝地工作?

由于

1 个答案:

答案 0 :(得分:2)

作为您问题的直接答案,您可以使用PostgreSQL外部数据包装器(FDW)功能来引用其他数据库中的表,包括MySQL。

http://www.postgresql.org/docs/current/interactive/ddl-foreign-data.html

http://wiki.postgresql.org/wiki/Foreign_data_wrappers

http://www.postgresql.org/docs/current/interactive/sql-createserver.html

http://www.postgresql.org/docs/current/interactive/sql-createforeigntable.html

也就是说,规划者优化加入外表的查询的能力受到严重限制。虽然针对一个外表的简单查询应该可以很好地执行,但如果您尝试使用复杂的声明性查询来运用SQL的真正功能,那么它可能比在PostgreSQL上完全放慢几个数量级。

如果可行的话,我的建议是将它全部移到PostgreSQL上。如果这会使时间线过于苛刻,您可以考虑将FDW用作快速启动和运行的临时“桥梁”,并在您有机会或需要时移动表格,以优化性能。