Re: Avoiding evaluating functions twice. - Mailing list pgsql-general

From Tom Lane
Subject Re: Avoiding evaluating functions twice.
Date
Msg-id 8569.1128439517@sss.pgh.pa.us
Whole thread Raw
In response to Avoiding evaluating functions twice.  (han.holl@informationslogik.nl)
Responses Re: Avoiding evaluating functions twice.  (han.holl@informationslogik.nl)
List pgsql-general
han.holl@informationslogik.nl writes:
> select expensive_function(table) from table
>                      where expensive_function(table) is not null;

> Is there a way to avoid that expensive_function is evaluated twice (if it's
> not null) ?

You can do something like this:

select f from
(select expensive_function(table) as f from table offset 0) ss
where f is not null;

The "offset 0" bit is a hack that keeps the planner from flattening the
sub-select into the upper query, which would result in two copies of the
function expression, which is what you want to avoid.

            regards, tom lane

pgsql-general by date:

Previous
From: "A. Kretschmer"
Date:
Subject: Re: export a select result in a file ?
Next
From: Sven Willenberger
Date:
Subject: Re: strip zeros from fractional part