2010-06-15 41 views
0

我有一個命名的範圍爲我的模型之一,工作正常。該代碼是:MySQL到PostreSQL和命名範圍

named_scope :inbox_threads, lambda { |user| 
{ 
    :include => [:deletion_flags, :recipiences], 
    :conditions => ["recipiences.user_id = ? AND deletion_flags.user_id IS NULL", user.id], 
    :group => "msg_threads.id" 
}} 

能正常工作在我的本地MySQL數據庫應用程序的副本,但是當我把我的應用程序的Heroku(只使用PostgreSQL的),我收到以下錯誤:

ActiveRecord::StatementInvalid (PGError: ERROR: column "msg_threads.subject" must appear in the GROUP BY clause or be used in an aggregate function:

SELECT "msg_threads"."id" AS t0_r0, "msg_threads"."subject" AS t0_r1, "msg_threads"."originator_id" AS t0_r2, "msg_thr eads"."created_at" AS t0_r3, "msg_threads"."updated_at" AS t0_r4, "msg_threads"."url_key" AS t0_r5, "deletion_flags"."id" AS t1_r0, "deletion_flags"."user_id" AS t1_r1, "deletion_flags"."msg_thread_id" AS t1_r2, "deletion_flags"."confirmed" AS t1_r3, "deletion_flags"."created_at" AS t1_r4, "deletion_flags"."updated_at" AS t1_r5, "recipiences"."id" AS t2_r0, "recipiences"."user_id" AS t2_r1, "recipiences"."msg_thread_id" AS t2_r2, "recipiences"."created_at" AS t2_r3, "recipien ces"."updated_at" AS t2_r4 FROM "msg_threads" LEFT OUTER JOIN "deletion_flags" ON deletion_flags.msg_thread_id = msg_threads.id LEFT OUTER JOIN "recipiences" ON recipiences.msg_thread_id = msg_threads.id WHERE (recipiences.user_id = 1 AND deletion_flags.user_id IS NULL) GROUP BY msg_threads.id)

我不熟悉的Postgres的工作,所以我需要的東西在這裏添加得到這個工作?謝謝!

回答

1

... must appear in the GROUP BY clause ...

MySQL的公然違反贊成簡單的標準,並允許您不指定你正在尋找GROUP BY每一個欄,而不是依靠訂貨挑選「最好的」可用值。

另一方面,Postgres(和大多數其他RDBMSes)要求您命名GROUP BY子句中選擇的每一列。如果您手動組合了該查詢,則需要逐個將每列添加到GROUP BY。如果ORM生成該查詢(這是基於所有雙引號的內容),那麼您需要檢查他們的Postgres支持和/或向他們提交錯誤。