PGError: ERROR: отношение "компании" не существует (postgresql, mysql, rails 3) - PullRequest
2 голосов
/ 26 января 2012

Недавно я добавил PostgreSQL в свое приложение, которое уже работало на MySQL, теперь приложение работает на двух базах данных.Я был в состоянии установить ассоциации между таблицами, присутствующими в другой базе данных, и она работает нормально.Сегодня я добавил функцию поиска на странице, которая использует таблицы, присутствующие в двух базах данных, и выдает ошибку.Потратил целый день, пытаясь выяснить ошибку, но не удалось.Пожалуйста, посмотрите на ассоциации, код и помогите мне исправить это.

У меня есть 4 таблицы: -

Компания (mysql)

Местоположение (mysql)

Отчет (PostgreSQL)

Отчет_категория (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_ пишу

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

после выполнения этой строки i 'Получив приведенную ниже ошибку

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 голосов
/ 24 марта 2013

Во-первых, я хочу поддержать предложение в комментариях, чтобы вы переместили все на один дБ.Это экономит вам много сложности в будущем.Однако, если вы действительно не можете этого сделать, есть несколько способов получить доступ к таблицам MySQL из PostgreSQL, и это будет решение второго класса для полной миграции, но это будет работать.

В PostgreSQL 9.1 и выше вы можете выполнять запросы только для чтения, используя сторонние оболочки данных для MySQL.В более ранних версиях вы можете использовать проект DBI-Link Дэвида Феттера для установления соединения.

Это позволит вам представить ваши данные в виде единой базы данных для ваших приложений.

...