2012-01-25 16 views
2

最近、MySQLで既に動作していたアプリケーションにPostgreSQLを追加しました。私は異なるデータベースに存在するテーブルとそのうまくいっさいの間の関連付けを確立することができました。今日私は、2つのデータベースに存在するテーブルを使用するページに検索機能を追加し、エラーをスローしました。バグを見つけようと一日中過ごしましたが、成功しませんでした。団体を調べて、コードを修正してください。PGError:ERROR:relation "companies"が存在しません(postgresql、mysql、rails 3)

カンパニー(mysqlの)

場所(mysqlの)

報告書(PostgreSQLの)

Report_category(PostgreSQLの)

モデル - - 会社:

は、私は4つのテーブルを持っています。 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 

iは、検索パラメータを渡すと、私の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つのデータベースを使用して検索するとエラーが発生します。助けてください

+0

どういうわけか私はレールが引数を分けて、あなたが全く同じクエリ内の2つの異なるDBMSシステムを使用していることを認識しており、それはポストグルだけにすべてを送信していることを認識しています。 postgresはmysqlの内容について全く何もしていないので、正当に「企業」テーブルがないと不平を言っています。 –

+2

なぜあなたは、MySQLとPostgreSQLのいくつかのテーブルを持っています。あなたはその中のすべてを持っているはずです。 –

+0

@ MarcBなので解決策はありませんか? –

答えて

0

まず最初に、すべてのものを1つのdbに移動するというコメントの提案を2番目にしたいと思います。これにより、多くの複雑さが軽減されます。しかし、実際にこれを行うことができない場合は、PostgreSQLからMySQLテーブルにアクセスするための方法がいくつかありますが、これは完全な移行の第二級の解決策ですが、うまくいくでしょう。

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

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

関連する問題