2010-09-21 2 views
6

Abgesehen von der Entfernung einiger MySQL-spezifischer Abfragen war die Migration ziemlich reibungslos. Das Problem ist nun, dass während der Entwicklung viel mehr Anfragen an die DB gestellt werden als zuvor.Umzug von MySQL nach 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 

Jede einzelne Abfrage führt zu 3-8 zusätzlichen Abfragen wie oben. Was und warum passiert? Eines der Probleme ist nun, dass development.log aufgebläht und unlesbar ist. Ich verschwende viel Zeit dazwischen diesen Abfragen Scrollen für die richtige Sache suchen ...

Updates: Di 21. September

Dies ist nicht auf den Abfragetyp verwendet. Alle Abfragen generieren diese Art von 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 row in set ree-1.8.7-2010.02>

+0

Veröffentlichen Sie die Abfrage, die die Anweisung generiert. Sie verwenden wahrscheinlich einen MySQL-orientierten Code. –

+1

Nicht der Fall, Erklärung zu der Frage hinzugefügt. – mdrozdziel

Antwort

4

Ich habe das von einem anderen Beitrag gestohlen: Sie können sich ansehen http://github.com/dolzenko/silent-postgres Das Plugin streift diese Abfragen aus. Dieses Protokollrauschen tritt aufgrund der hohen Postgresql-Protokollstufe auf.

+0

Das funktioniert wie ein Zauber, danke! – mdrozdziel

1

Die zweite Abfrage von der Anwendung verwendet wird, erhalten Informationen über den verwendeten Datentyp und um festzustellen, ob die Spalte Nullwerte enthalten kann oder nicht. Wenn Sie pgAdmin3 verwenden, werden Sie auch eine Menge dieser Art von Abfragen sehen, nur um Metadaten der Ergebnisse zu erhalten. Die meisten Anwendungen brauchen keine Abfragen wie diese, sie sind meistens nützlich während der Entwicklung und für Tools wie pgAdmin.

+0

Ok, aber gibt es eine Möglichkeit, dies während der Entwicklung zu deaktivieren. Ich kann mein Protokoll jetzt nicht mehr verfolgen. Es wird wirklich nervig ... – mdrozdziel

+0

Editieren Sie postgresql.conf und setzen Sie log_min_duration_statement auf 1000. 1000 = 1000 Millisekunden, 1 Sekunde. Sie könnten log_min_error_statement auch auf ERROR setzen. Sie müssen postgresql.conf als Superuser neu laden: SELECT pg_reload_conf(); Sie könnten Ihren Datenbankserver auch neu starten. –