Присоединить модель ActiveRecord к таблице в другой схеме без модели - PullRequest
0 голосов
/ 26 июня 2019

Мне нужно присоединить модель ActiveRecord в моем приложении Ruby on Rails к другой таблице в другой схеме, которая не имеет модели. Я искал ответ и нашел его части, но не целое решение в одном месте, отсюда и этот вопрос.

У меня есть модель корабля с миллионами строк.

У меня есть таблица (reload_cars) в другой схеме (temp_cars) в той же базе данных с несколькими миллионами записей. Это специальная таблица, которая будет использоваться для одного специального обновления данных и никогда не будет использоваться снова. С этой таблицей не связано никакой модели.

Сначала я был ленив и выбрал все записи reload_cars в массив (reload_vins) в одном запросе, а затем во втором запросе сделал что-то вроде:

`Vehicle.where(vin_status: :invalid).where('vin in (?)', reload_vins)`. 

Это немного упрощает фактический запрос, но демонстрирует необходимое объединение. В других запросах мне нужны полные наборы внутренних и внешних объединений между этими таблицами. Мне также нужно поместить различные критерии выбора в таблицу моделей и / или таблицу немоделей на разных этапах.

Этот тупой подход хорошо работал при разработке, но не масштабировался до производственной базы данных. Я думал, что это займет несколько минут, чего достаточно для одноразовой операции. Но время истекло, особенно при циклическом просмотре наборов записей. Небольшие настройки не помогли.

Итак, мне нужно сделать законное соединение.

1 Ответ

0 голосов
/ 26 июня 2019

Оглядываясь назад, ответ кажется довольно очевидным. Этот запрос выполнялся практически мгновенно и дал точный ожидаемый результат с различными критериями для каждой таблицы.

Вот один такой запрос:

Vehicle.where(vin_status: :invalid)
       .joins("
               join temp_cars.reload_cars tcar
               on tcar.vin = vehicles.vin
               where tcar.registration_id is not null
       ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...