han(dot)holl(at)informationslogik(dot)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