Re: Invalid optimization of VOLATILE function in WHERE clause? - Mailing list pgsql-hackers

From ktm@rice.edu
Subject Re: Invalid optimization of VOLATILE function in WHERE clause?
Date
Msg-id 20120919194735.GK25663@aart.rice.edu
Whole thread Raw
In response to Re: Invalid optimization of VOLATILE function in WHERE clause?  ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>)
Responses Re: Invalid optimization of VOLATILE function in WHERE clause?  ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>)
List pgsql-hackers
On Wed, Sep 19, 2012 at 02:39:12PM -0500, Kevin Grittner wrote:
> Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > Robert Haas <robertmhaas@gmail.com> writes:
> >> It still seems like awfully weird behavior.
> > 
> > Why?  The WHERE condition relates only to the output of the _stats
> > subquery, so why shouldn't it be evaluated there, rather than
> > after the join?
> 
> In another thread, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > It's easier to understand why this is if you realize that SQL has
> > a very clear model of a "pipeline" of query execution. 
> > Conceptually, what happens is:
> > 
> > 1. Form the cartesian product of the tables listed in FROM (ie,
> > all combinations of rows).
> > 
> > 2. Apply the WHERE condition to each row from 1, and drop rows
> > that don't pass it.
>  
> People expect that the results will be consistent with this model,
> even if the implementation is optimized "under the covers".  I think
> correct semantics should trump performance here.
>  
> -Kevin
> 

It seems like this is what happens here except that the function is
evaluated once for the WHERE and not once per ROW. Both of these meet
the criterion for 2 above and Tom's earlier comments both hold.

Regards,
Ken



pgsql-hackers by date:

Previous
From: "Kevin Grittner"
Date:
Subject: Re: Invalid optimization of VOLATILE function in WHERE clause?
Next
From: Daniel Browning
Date:
Subject: CTE optimization fence on the todo list?