Re: Function returning 2 columns evaluated twice when both columns are needed

From: Gerhard Wiesinger <lists(at)wiesinger(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Function returning 2 columns evaluated twice when both columns are needed
Date: 2009-10-19 05:39:00
Message-ID: alpine.LFD.2.00.0910190732140.18766@bbs.intern
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Sun, 18 Oct 2009, Tom Lane wrote:

> Gerhard Wiesinger <lists(at)wiesinger(dot)com> writes:
>> Since getSums() is a cursor and is complex and takes long time getSums
>> should only be evaluated once. Is there a better solution available to
>> get both columns from the function in the select?
>
> You need a sub-select, along the lines of
>
> SELECT
> cur_date,
> (gs).sum_m1,
> (gs).sum_m2
> FROM
> (
> SELECT
> cur_date,
> getSums(start_ts, stop_ts) AS gs
> FROM
> getDatesTimestamps($1, $2)
> OFFSET 0
> ) AS ss
> ;
>
> The OFFSET bit is a kluge, but is needed to keep the planner from
> flattening the subquery and undoing your work.
>

Thnx Tom. It also works without the OFFSET kludge. Any ideas why?
Looks also reasonable to me because there is no SETOF returned.

BTW: Why is the function in the original statement evaluated twice? On
"SELECT table.*" I guess query is also executed once and not n times (for
each column).

PG is version 8.3.8.

Thnx.

Ciao,
Gerhard

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Albe Laurenz 2009-10-19 07:58:00 Re: pgadmin3 hangs during dump
Previous Message 窦德厚 (ddh) 2009-10-19 05:18:44 unsubscribe