Re: Stored procedure returning row or resultset - Mailing list pgsql-sql

From Tom Lane
Subject Re: Stored procedure returning row or resultset
Date
Msg-id 17131.1034615852@sss.pgh.pa.us
Whole thread Raw
In response to Re: Stored procedure returning row or resultset  (Richard Huxton <dev@archonet.com>)
Responses Re: Stored procedure returning row or resultset
List pgsql-sql
Richard Huxton <dev@archonet.com> writes:
> Have you looked at marking f1() etc cachable? This means Postgresql
> will only call the function once for each parameter-set.

Unfortunately that's not true at all, or at least not helpful for this
problem.  The cachable attribute was poorly named, because it leads
people to think that PG *will* cache function results, as opposed to
*could* cache function results.

A possible workaround is along the lines of

SELECT f1, f1 + f2, f1 + f2 + f3 FROM
(SELECT f1() as f1, f2() as f2, f3() as f3 LIMIT 1) tmp;

Note the LIMIT 1 ... without that, the planner may flatten the two
levels of SELECT together, eliminating the savings you're trying for.
(I don't recall offhand all the conditions that govern flattening
of a sub-select, but I'm pretty sure a sub-LIMIT will prevent it.)
        regards, tom lane


pgsql-sql by date:

Previous
From: Richard Huxton
Date:
Subject: Re: Stored procedure returning row or resultset
Next
From: Keith Gray
Date:
Subject: Slow performance on MAX(primary_key)