Преобразование из MySQL в Postgres и получение ошибки «столбец« Продукт »не существует» - PullRequest
1 голос
/ 13 сентября 2011

Я использую 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 Ответ

2 голосов
/ 13 сентября 2011

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

...