PGError:错误:关系“公司”不存在(postgresql,mysql,rails 3)

时间:2012-01-25 20:24:22

标签: ruby ruby-on-rails-3 rails-postgresql

最近我将PostgreSQL添加到已经在MySQL上运行的应用程序,现在应用程序正在两个数据库上运行。我能够在不同数据库中存在的表之间建立关联,并且其工作正常。今天,我在一个页面中添加了一个搜索功能,该功能使用两个数据库中存在的表,并抛出错误。花了一整天试图找出错误但没有成功。请查看关联,代码并帮我纠正。

我有4张桌子: -

公司(MySQL的)

位置(MySQL的)

报告(PostgreSQL的)

REPORT_CATEGORY(PostgreSQL的)

model - 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)

完美无缺。如果我使用两个数据库进行搜索,我只会收到错误。请帮忙

1 个答案:

答案 0 :(得分:0)

首先,我想在评论中提出你将所有内容移到一个数据库中的建议。这为您节省了很多复杂性。但是,如果你真的不能这样做,有几种方法可以从PostgreSQL中访问MySQL表,这将是完整迁移的第二类解决方案,但它可以工作。

在PostgreSQL 9.1及更高版本中,您可以使用MySQL的外部数据包装器进行只读查询。在早期版本中,您可以使用David Fetter的DBI-Link项目进行连接。

然后,您可以将数据作为统一数据库呈现给应用程序。