从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>
我从另一篇文章偷了这个:你可能想看看http://github.com/dolzenko/silent-postgres这个插件删除了这些查询。那些日志噪音是由于postgresql日志级别较高而发生的。
这就像一个魅力,谢谢! – mdrozdziel 2010-09-27 09:16:20
第二个查询所使用的应用程序来获得有关所用数据类型的信息,并查看该列是否可以为空。如果你使用pgAdmin3,你也会看到很多这类查询,只是为了获得结果的元数据。大多数应用程序不需要这样的查询,它在开发过程中以及诸如pgAdmin之类的工具都非常有用。
好的,但有没有办法在开发过程中禁用此功能。我现在无法跟踪我的日志。它变得非常讨厌...... – mdrozdziel 2010-09-21 11:20:16
编辑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
发布生成语句的查询。您可能正在使用一些面向MySQL的代码。 – 2010-09-21 08:54:15
不是这种情况,解释添加到问题中。 – mdrozdziel 2010-09-21 11:24:52