Please keep the list copied.
Grant Masan <grant.massan@gmail.com> 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