2

最近、MySQL で既に実行されているアプリケーションに PostgreSQL を追加しました。現在、アプリケーションは 2 つのデータベースで実行されています。別のデータベースに存在するテーブルと正常に機能するテーブルとの関連付けを確立できました。今日、2 つのデータベースに存在するテーブルを使用するページに検索機能を追加し、エラーをスローしました。一日中バグを見つけようとしましたが、うまくいきませんでした。関連付け、コードを調べて、修正するのを手伝ってください。

私は4つのテーブルを持っています:-

会社(mysql)

場所(mysql)

レポート(PostgreSQL)

Report_category(PostgreSQL)

モデル - company.rb

establish_connection Rails.env+"_postgres"
has_many :reports

establish_connection Rails.env
belongs_to :location

location.rb

has_many :companies

report.rb

establish_connection Rails.env
belongs_to :company

establish_connection Rails.env+"_postgres"
belongs_to :report_category

report_category.rb

establish_connection Rails.env+"_postgres"
has_many :report

ビューから検索パラメーターを渡し、reports_controller に書き込みます

@reports = Report.where("companies.name like ? and report_category.name ?", params[:company], params[:category]).includes(:company, :report_category)

この行を実行した後、以下のエラーが発生します

ActiveRecord::StatementInvalid: PGError: ERROR:  relation "companies" does not exist

しかし

Company.where("location.name like ?", params[:location]).includes(:location)

また

Report.where("report_categories.name like ?", params[:category]).includes(:report_category)

完全に正常に動作します。2 つのデータベースを使用して検索した場合にのみ、エラーが発生します。助けてください

4

1 に答える 1

0

最初に、すべてを 1 つのデータベースに移動するというコメントの提案を 2 番目にしたいと思います。これにより、今後の複雑さが大幅に軽減されます。ただし、これが本当にできない場合は、PostgreSQL 内から MySQL テーブルにアクセスする方法がいくつかあります。これは、完全移行の第 2 級のソリューションですが、うまくいきます。

PostgreSQL 9.1 以降では、MySQL の外部データ ラッパーを使用して読み取り専用クエリを実行できます。以前のバージョンでは、David Fetter の DBI-Link プロジェクトを使用して接続できました。

これらにより、データを統合データベースとしてアプリケーションに提示できます。

于 2013-03-24T04:53:29.573 に答える