Please keep the list copied. Grant Masan <grant.massan@xxxxxxxxx> wrote: > CREATE FUNCTION ... RETURNS SETOF ... > FOR ... IN SELECT ... LOOP > FOR ... IN SELECT ... LOOP > FOR ... IN SELECT ... LOOP > > RETURN NEXT text_output; > > END LOOP; > END LOOP; > END LOOP; I don't have time to work through the logic of all this to try to discern what your goal is; but in my experience, such procedural code can usually be rewritten as a single query. The results are typically orders of magnitude better. > SELECT * FROM info_tool(linest,date,date) > "Function Scan on info_tool (cost=0.00..260.00 rows=1000 width=108) > (actual time=437712.611..437712.629 rows=14 loops=1)" > "Total runtime: 437712.686 ms" To get useful information you need EXPLAIN ANALYZE from statements inside the function, not of the execution of the function. -Kevin -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance