1

私はmysqlとpostgresデータベースを使用するアプリケーションをビルドしています。このアプリは位置情報に基づいているので、私はポストグアのためにポストグルを使用しています。 Postgresは1つのデータベースPlacesしか持っていませんが、mysqlは他のすべてのものを含んでいます。開発中には、Placeモデルを含むさまざまなモデルの間にいくつかの関連付けを設定しました。しかし、私が気づいたように、異なるデータベースのため、結合の結合クエリは失敗しました。Railsモデルの関連付けが異なるデータベース

私の考えは、Postgres DB内のすべてのテーブルを移動することです。私はMySQLを特に必要としません。

しかし、MySQLからのPostgresへの移行は私の最後の選択です。私は、異なるデータベースに座っているモデル間の連携をシームレスに行う方法があるのだろうかと思っていましたか?

おかげ

+0

あなたのアプリケーションをきれいに保つために、別のデータベースに関連付ける良い習慣ではありません –

答えて

2

あなたの質問に直接答えとして、あなたは、MySQLなどの他のデータベースからテーブルを参照するためにPostgreSQLの外国データラッパー(FDW)機能を使用することができます。言っ

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

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

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

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

は、外部テーブルを結合するクエリを最適化するプランナの能力が厳しく制限されています。複雑な宣言的なクエリを使ってSQLの本当の力を発揮しようとすると、外部のテーブルに対する単純なクエリはかなりうまくいくはずですが、PostgreSQL上にある場合よりもはるかに遅くなります。

可能であれば、PostgreSQLに全面的に移行することをお勧めします。それがタイムラインをひどく駄目にしてしまう場合は、一時的なブリッジとしてFDWを使用して、素早く立ち上げて実行し、パフォーマンスを最適化するために機会や必要に応じてテーブルを移動してください。

+0

アドバイスをいただきありがとうございます。私は実際に先に進み、すべてをpostgres DBに移しました。 Postgres-Railsアダプタでは認識されない 'tsvector'などの小さな問題がありますが、すべてがFDWに比べて単純です。 – hashpipe

関連する問題