суммы возвращают String, только с postgresql

4

Я переношу базу данных из mysql в postgres. Сама миграция была в порядке, следуя документации postgres.

В настоящее время я исправляю наши специфические запросы mysql.

В какой-то момент у нас есть что-то вроде этого:

select(%(
  SUM(CASE WHEN income THEN value ELSE 0 END) AS rents,
  SUM(CASE WHEN not income THEN value ELSE 0 END) AS expenses
))

В mysql это был sum(if(incomes, value, 0)) и т.д., и он работал как ожидалось.

С PG он возвращает строку вместо числового.

Я уже проверил базу данных и правильный тип данных.

Что делать, кроме литых to_d или to_f?


EDIT: полный запрос:

SELECT 
 SUM(CASE WHEN income THEN value ELSE 0 END) AS rents,
 SUM(CASE WHEN not income THEN value ELSE 0 END) AS expenses
 FROM "transactions"
 WHERE "transactions"."type" IN ('Transaction')
 AND "transactions"."user_id" = 1
 AND "transactions"."paid" = 't'
 AND (transactions.date between '2013-09-01' and '2013-09-30')
 LIMIT 1
  • 3
    Какой тип данных для value ?
  • 1
    @mvp: Неважно, Model.select('1 as x').first.x.class тоже говорит о String .
Показать ещё 6 комментариев
Теги:
activerecord
ruby-on-rails-3

1 ответ

3
Лучший ответ

Насколько я знаю, используя .to_f, .to_i или что-то в этом роде - адаптер Rails PostGres кажется непреклоненным, что все это строка, если она не является моделью ActiveRecord.

Смотрите: connection.select_value возвращает строки только в postgres с pg gem

Я не особо одобряю это, но, как говорится, "работает по назначению".

  • 0
    Да, определенно проблема с активной записью PostgreSQL, а не сама база данных.
  • 0
    Вы можете делать такие вещи, как Model.select(...).each { |m| def mx; attributes['x'].to_i; end } при желании.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню