从MySQL转换为Postgres并获得“列”产品“不存在”错误

时间:2011-09-13 04:44:29

标签: ruby-on-rails activerecord acts-as-taggable-on rails-postgresql

我在rails中使用acts_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中,我收到“Product”列不存在的错误。

生成的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 个答案:

答案 0 :(得分:2)

你应该在PostgreSQL中用单引号引用字符串文字,而不是双引号,双引号用于引用标识符(例如表名和列名)。 MySQL倾向于快速和松散地使用标准,PostgreSQL往往更加严格。