Ошибка конвертации из MySQL в Postgres и получение столбца "Товар" не существует "

Я использую act_as_taggable_on в рельсах, и я пытаюсь получить список всех продуктов, которые еще должны быть помечены. В MySQL работал следующий запрос:

  def self.untagged
    available.find(:all, 
    :joins => %{LEFT JOIN taggings ON products.id = taggings.taggable_id AND taggings.taggable_type = "Product"}, 
    :conditions => "taggings.id IS NULL AND for_sale IS true",
    :order => "products.updated_at DESC"
    )

Однако в Postgres я получаю сообщение об ошибке, что столбец "Продукт" не существует.

Сгенерированный SQL выглядит так:

SELECT count(*) AS count_all FROM "products"  LEFT JOIN taggings ON products.id = taggings.taggable_id AND taggings.taggable_type = "Product" WHERE (taggings.id IS NULL AND for_sale IS true) AND (products.date_expires > '2011-09-12') ) 

Любые предложения о том, как заставить это работать? Я бы предпочел использовать активный способ записи, чтобы он все еще работал в MySQL. Но это то, что я хотел бы пожертвовать.

Заранее спасибо..

1 ответ

Решение

Вы должны заключать строковые литералы в одинарные кавычки в PostgreSQL, а не в двойные, двойные - для идентификаторов (таких как имена таблиц и столбцов). MySQL имеет тенденцию играть быстро и свободно со стандартами, PostgreSQL, как правило, намного строже.

Другие вопросы по тегам