Aufruf SQL-Log von Odoo

Dieser Artikel beschreibt, wie man mit Hilfe des Konsolenbefehls --log-sql einen ausführlichen Log aufrufen kann, welcher das genaue Geschehen auf Datenbankebene zum Beispiel bei einem Update aufzeigt. Der Befehl zum Aufrufen des Logs --log-sql ist ein Shortcuts und steht für --log-handler=openerp.sql_db:DEBUG.

Das nachfolgende Codesnippet zeigt den kompletten Aufruf in der Konsole:

python odoo.py -c /home/odoo/Dekstop/conf/odoo8.conf --db-filter=myodoo_3 -u all --log-sql | tee /home/odoo/Desktop/meinlog.py
  • myodoo_3 → Datenbankname
  • -u all → Update all Befehl (hier kann auch nur das jeweilige Modul aufgerufen werden, welches überprüft werden soll)
  • tee → tee ist ein Standard Unix Kommando. Der Befehl liest Daten ein und gibt diese in einer neu anzulegende oder bestehende Datei aus. /home/odoo/Desktop/meinlog.py gibt das Verzeichnis und den Dateinamen "meinlog.py" an in der der Log gespeichert wird. 

Wird nun dieser Befehl ausgeführt, so bekommt man ein detaillierte Ansicht über das genaue Geschehen auf Datenbankebene. Um einen Einblick in die Ausgabe zu bekommen, wird nachfolgend ein kleiner Teil der Ausgabe aufgeführt.

Ausgabe:

2016-04-11 09:13:19,731 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT indexname FROM pg_indexes WHERE indexname = 'wizard_ir_model_menu_create_write_date_index' and tablename = 'wizard_ir_model_menu_create'
2016-04-11 09:13:19,732 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT id FROM ir_model WHERE model='ir.sequence.type'
2016-04-11 09:13:19,732 25016 DEBUG myodoo_3 openerp.sql_db: query: select * from ir_model_data where name='model_ir_sequence_type' and module='base'
2016-04-11 09:13:19,732 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT * FROM ir_model_fields WHERE model='ir.sequence.type'
2016-04-11 09:13:19,733 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT relname FROM pg_class WHERE relkind IN ('r','v') AND relname='ir_sequence_type'
2016-04-11 09:13:19,734 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT 1 FROM "ir_sequence_type" LIMIT 1
2016-04-11 09:13:19,735 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT a.attname, a.attnotnull  FROM pg_class c, pg_attribute a WHERE c.relname='ir_sequence_type'   AND c.oid=a.attrelid   AND a.attisdropped=false   AND pg_catalog.format_type(a.atttypid, a.atttypmod) NOT IN ('cid', 'tid', 'oid', 'xid')   AND a.attname NOT IN ('create_uid', 'code', 'create_date', 'name', 'write_uid', 'write_date', 'id', 'id', 'create_uid', 'create_date', 'write_uid', 'write_date')
2016-04-11 09:13:19,735 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT c.relname,a.attname,a.attlen,a.atttypmod,a.attnotnull,a.atthasdef,t.typname,CASE WHEN a.attlen=-1 THEN (CASE WHEN a.atttypmod=-1 THEN 0 ELSE a.atttypmod-4 END) ELSE a.attlen END as size FROM pg_class c,pg_attribute a,pg_type t WHERE c.relname='ir_sequence_type' AND c.oid=a.attrelid AND a.atttypid=t.oid
2016-04-11 09:13:19,736 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT indexname FROM pg_indexes WHERE indexname = 'ir_sequence_type_create_uid_index' and tablename = 'ir_sequence_type'
2016-04-11 09:13:19,737 25016 DEBUG myodoo_3 openerp.sql_db: query: SELECT confdeltype as ondelete_rule, conname as constraint_name,
                             cl2.relname as foreign_table
                      FROM pg_constraint as con, pg_class as cl1, pg_class as cl2,
                           pg_attribute as att1, pg_attribute as att2
                      WHERE con.conrelid = cl1.oid
                        AND cl1.relname = 'ir_sequence_type'
                        AND con.confrelid = cl2.oid
                        AND array_lower(con.conkey, 1) = 1
                        AND con.conkey[1] = att1.attnum
                        AND att1.attrelid = cl1.oid
                        AND att1.attname = 'create_uid'
                        AND array_lower(con.confkey, 1) = 1
                        AND con.confkey[1] = att2.attnum
                        AND att2.attrelid = cl2.oid
                        AND att2.attname = 'id'
                        AND con.contype = 'f'

 

Zusammenfassung:

Dieser Artikel hat aufgezeigt, wie man mit Hilfe des log-Befehls von Odoo einen genaueren Einblick auf das Geschehen auf Datenbankebene während eines Update all oder nur eines Updates eines einzelnen Moduls erhält. Durch die Möglichkeit der Ausgabe des logs in eine separate Datei, kann der Log im Nachhinein genauer begutachtet, studiert und gegebenenfalls nach Fehler analysiert werden.