Ich verwende eine PL / pgSQL-Funktion in PostgreSQL 9.3 mit mehreren komplexen Abfragen:
create function f1()
returns integer as
$$
declare
event tablename%ROWTYPE;
....
....
begin
FOR event IN
SELECT * FROM tablename WHERE condition
LOOP
EXECUTE 'SELECT f2(event.columnname)' INTO dummy_return;
END LOOP;
...
INSERT INTO ... FROM a LEFT JOIN b ... LEFT JOIN c WHERE ...
UPDATE T SET cl1 = M.cl1 FROM M WHERE M.pkcols = T.pkcols;
...
end
$$ language plpgsql;
Wenn ich renne EXPLAIN ANALYZE f1()
, bekomme ich nur die Gesamtzeit, aber keine Details. Gibt es eine Möglichkeit, detaillierte Ergebnisse für alle Abfragen in der Funktion zu erhalten?
Sollten Abfragen in der Funktion nicht von Postgres optimiert werden, würde ich auch um eine Erklärung bitten.
auto_explain.log_nested_statements
könnte helfen. Siehe postgresql.org/docs/9.3/static/auto-explain.html