【问题标题】:Rails Model associations but different databasesRails 模型关联但不同的数据库
【发布时间】:2012-05-15 23:11:10
【问题描述】:

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

我的想法是只在 Postgres 数据库中移动我的所有表。因此,我对 MySQL 没有任何特殊需求。

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

谢谢

【问题讨论】:

  • 为了让您的应用程序保持清洁,关联到不同的数据库并不是一个好习惯

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


【解决方案1】:

作为对您问题的直接回答,您可以使用 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 作为临时“桥梁”,以便快速启动和运行,并在有机会或需要时移动表,以优化性能。

【讨论】:

  • 感谢您的建议。实际上,我继续将所有内容移至 postgres 数据库。尽管有一些小问题,例如 Postgres-Rails 适配器无法识别“tsvector”,但与 FDW 相比,一切都很简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
相关资源
最近更新 更多