Estou usando uma função PL / pgSQL no PostgreSQL 9.3 com várias consultas complexas dentro:
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;
Se eu corria EXPLAIN ANALYZE f1()
, só recebia o tempo total, mas não havia detalhes. Existe uma maneira de obter resultados detalhados para todas as consultas na função?
Se as consultas na função não deveriam ser otimizadas pelo Postgres, também pediria uma explicação.
auto_explain.log_nested_statements
pode ajudar. Veja postgresql.org/docs/9.3/static/auto-explain.html