Rails postgres sql просматривает отсутствующие данные при создании с помощью миграции

#ruby-on-rails #postgresql #ruby-on-rails-4 #rake #postgresql-9.5

#ruby-on-rails #postgresql #ruby-on-rails-4 #грабли #postgresql-9.5

Вопрос:

Я ускорил некоторые статистические отчеты в своем проекте rails (4.2.7, база данных postgres 9.5), создав представления sql.

Я написал весь код в pgAdmin, проверил все данные в представлениях. Затем я сгенерировал миграцию в своем проекте rails и скопировал весь написанный код sql в миграцию.

Когда я запускаю миграцию, все представления создаются со случайно отсутствующими данными.

Пример:

 create or replace view revenue_by_date as
  select sum(reward) as reward_coins, count(ot.id) as amount, (sum(reward)::float / substring(value from '---s''(d )''')::bigint) as reward_dollars,
  ot.created_at::date as date
  from offerwall_transactions ot
  inner join settings on var = 'exchange_rate'
  where ot.reward > 1
  group by ot.created_at::date, settings.value;
 

Я получаю данные reward_dollars отсутствуют.
Результат запроса

Однако при создании с помощью PGA данные в порядке Обычный результат запроса

Структура таблицы настроек: Настройки

Структура таблицы транзакций Offerwall: OT

У меня такие же проблемы с другими взглядами. Некоторые представления создаются вообще без каких-либо данных.

Где ошибка?

Комментарии:

1. on var = 'exchange_rate' не очень специфично. Вероятно, это приведет к картезианскому произведению.

2. ‘var’ — это текстовый столбец в «настройках». Я постараюсь использовать более конкретные ‘settings.var’.

3. Но по-прежнему нет подключения к offerwall_transactions таблице, вы ограничиваете только константу (аналогично для предложения WHERE)

4. Да, нет соединения между «настройками» и «offerwall_transactions». Мне просто нужно получить значение поля ‘exchange_rate’ для вычисления. В принципе, просто select reward / (select settings.value from settings where settings.var='exchange_rate') from offerwall_transactions . В этом случае соединение лучше, не так ли?

5. Итак, settings.var является ли ключ-кандидат (или PK) для таблицы настроек? Кстати: на этот вопрос нельзя ответить без подробной информации о модели данных (я предполагал, что это своего рода структура, подобная EAV)