2010-09-21 169 views
6

除了刪除一些MySQL特定查詢之外,遷移非常順利。現在的問題是,在開發過程中,對數據庫的查詢比以前多得多。從MySQL遷移到Postgres on Rails 3

Started GET "/profiles/data" for 127.0.0.1 at Tue Sep 21 10:26:18 +0200 2010 
Processing by ProfilesController#data as JSON 
User Load (24.3ms) SELECT "users".* FROM "users" ORDER BY updated_at DESC LIMIT 1 
CACHE (0.0ms) SELECT "users".* FROM "users" ORDER BY updated_at DESC LIMIT 1 
SQL (10.5ms) SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull 
FROM pg_attribute a LEFT JOIN pg_attrdef d 
ON a.attrelid = d.adrelid AND a.attnum = d.adnum 
WHERE a.attrelid = '"users"'::regclass 
AND a.attnum > 0 AND NOT a.attisdropped 
ORDER BY a.attnum 

每個查詢都會導致3-8個額外的查詢,如上所述。什麼和爲什麼發生?現在的問題之一是,開發日誌臃腫且難以理解。我浪費了大量的時間滾動插圖中那些尋找正確的事情查詢等等。

更新:週二09月21日

這是不相關的查詢類型。所有查詢都產生這種stuph的:

ree-1.8.7-2010.02 > User.first 
    SQL (0.3ms) SHOW client_min_messages 
    SQL (2.0ms) SET client_min_messages TO 'panic' 
    SQL (6.3ms) SET standard_conforming_strings = on 
    SQL (18.3ms) SET client_min_messages TO 'notice' 
    SQL (15.6ms) SET time zone 'UTC' 
    SQL (17.2ms) SHOW TIME ZONE 
    SQL (23.8ms) SELECT tablename FROM pg_tables WHERE schemaname = ANY (current_schemas(false)) 
    User Load (162.4ms) SELECT "users".* FROM "users" LIMIT 1 
    SQL (7.5ms) SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, 
    a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid 
    AND a.attnum = d.adnum WHERE a.attrelid = '"users"'::regclass AND a.attnum > 0 AND 
    NOT a.attisdropped ORDER BY a.attnum 

[...] 1行中集 REE-1.8.7-2010.02>

+0

發佈生成語句的查詢。您可能正在使用一些面向MySQL的代碼。 – 2010-09-21 08:54:15

+1

不是這種情況,解釋添加到問題中。 – mdrozdziel 2010-09-21 11:24:52

回答

1

第二個查詢所使用的應用程序來獲得有關所用數據類型的信息,並查看該列是否可以爲空。如果你使用pgAdmin3,你也會看到很多這類查詢,只是爲了獲得結果的元數據。大多數應用程序不需要這樣的查詢,它在開發過程中以及諸如pgAdmin之類的工具都非常有用。

+0

好的,但有沒有辦法在開發過程中禁用此功能。我現在無法跟蹤我的日誌。它變得非常討厭...... – mdrozdziel 2010-09-21 11:20:16

+0

編輯postgresql.conf並將log_min_duration_statement設置爲1000. 1000 = 1000毫秒,1秒。您也可以將log_min_error_statement設置爲ERROR。您必須以超級用戶身份重新加載postgresql.conf:SELECT pg_reload_conf();您也可以重新啓動數據庫服務器。 – 2010-09-21 11:36:46