从MySQL迁移到Postgres on Rails 3

问题描述:

除了删除一些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

我从另一篇文章偷了这个:你可能想看看http://github.com/dolzenko/silent-postgres这个插件删除了这些查询。那些日志噪音是由于postgresql日志级别较高而发生的。

+0

这就像一个魅力,谢谢! – mdrozdziel 2010-09-27 09:16:20

第二个查询所使用的应用程序来获得有关所用数据类型的信息,并查看该列是否可以为空。如果你使用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