Re: Function returning 2 columns evaluated twice when both columns are needed - Mailing list pgsql-general

From Tom Lane
Subject Re: Function returning 2 columns evaluated twice when both columns are needed
Date
Msg-id 10515.1255899603@sss.pgh.pa.us
Whole thread Raw
In response to Function returning 2 columns evaluated twice when both columns are needed  (Gerhard Wiesinger <lists@wiesinger.com>)
Responses Re: Function returning 2 columns evaluated twice when both columns are needed
List pgsql-general
Gerhard Wiesinger <lists@wiesinger.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.

            regards, tom lane

pgsql-general by date:

Previous
From: Gerhard Wiesinger
Date:
Subject: Function returning 2 columns evaluated twice when both columns are needed
Next
From: "Brent Wood"
Date:
Subject: Re: db not dumping properly, or at least not restoring