Re: Repeat execution of stable expressions - Mailing list pgsql-performance

From Merlin Moncure
Subject Re: Repeat execution of stable expressions
Date
Msg-id CAHyXU0wPD00FQJAw3Yx3MhKiEthWtf07eeATNGOczK=ase1sfw@mail.gmail.com
Whole thread Raw
In response to Re: Repeat execution of stable expressions  (Peter van Hardenberg <pvh@pvh.ca>)
List pgsql-performance
On Mon, Mar 5, 2012 at 6:41 PM, Peter van Hardenberg <pvh@pvh.ca> wrote:
> On Mon, Mar 5, 2012 at 3:15 PM, Merlin Moncure <mmoncure@gmail.com> wrote:
>> I've complained many times that
>> select (f()).*;
>>
>> will execute f() once for each returned field of f() since the server
>> essentially expands that into:
>>
>> select f().a, f().b;
>>
>
> oh, this is why we expand rows inside a WITH statement.
>
> it should probably be fixed, but you should find something like
>
> WITH fn AS SELECT f(),
> SELECT (fn).a, (fn).b
>
> will make your life better

sure, but WITH is an optimization fence.  I use a lot of views, and if
you wrap your view with WITH, then your quals won't get pushed
through. ditto if you use the 'OFFSET 0' hack to keep the subquery
from being flattened out.

merlin

pgsql-performance by date:

Previous
From: Rory Campbell-Lange
Date:
Subject: Re: Advice sought : new database server
Next
From: Jan Otto
Date:
Subject: Re: Repeat execution of stable expressions