Re: Common Table Expressions applied; some issues remain

Поиск
Список
Период
Сортировка
От Peter Eisentraut
Тема Re: Common Table Expressions applied; some issues remain
Дата
Msg-id 48E85A7F.5000806@gmx.net
обсуждение исходный текст
Ответ на Common Table Expressions applied; some issues remain  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Common Table Expressions applied; some issues remain  (Gregory Stark <stark@enterprisedb.com>)
Re: Common Table Expressions applied; some issues remain  (Gregory Stark <stark@enterprisedb.com>)
Re: Common Table Expressions applied; some issues remain  (Decibel! <decibel@decibel.org>)
Список pgsql-hackers
Tom Lane wrote:
> that Oracle chooses to treat WITH-queries as if they were plain
> sub-selects if they're non-recursive and only referenced once.
> That is, Oracle would rewrite the above into
> 
>     SELECT * FROM ( SELECT * FROM foo ) AS q WHERE key = 42;
> 
> and then flatten the sub-select and optimize normally.  It would
> not be hard to make Postgres do the same, but then we would lose
> some guarantees about predictable execution of volatile functions.
> 
> I'm inclined to think that there is no reason to provide two
> different syntaxes to do the same thing, and so having the WITH
> syntax behave like this is okay.  But it could well result in
> performance surprises for people who are used to Oracle.
> 
> Any thoughts on what to do?  One possibility is to flatten only
> if the subquery doesn't contain any volatile functions.

I don't think we should overload syntax choices with optimization hints.   We don't really know why or how people will
beusing this syntax, and 
 
labeling it from the start as "will have unusual performance behavior" 
isn't a good sell.

As a precedent, consider the JOIN syntax, which is obviously redundant 
and in its first implementation contained an implicit optimization hint 
with regard to join order that later had to be done away with because it 
confused users (I think).  The CTE case is quite similar, and maybe the 
GUC answer of old could apply here as well.  But I think by default we 
should abide by SQL's declarative approach of "Tell me what you want and 
I'll execute it any way I like."

Also, why is predictability about volatile function executation a 
requirement?  Is there some typical use case that involves sequences 
functions here or something?

> 2. The patch didn't touch the implicit-RTE code, which means that
> 
>     WITH q AS ( SELECT ... )
>     SELECT q.*
> 
> will fail even if you've got add_missing_from enabled.  I'm inclined
> to think that this violates the principle of least surprise.  On
> the other hand, add_missing_from is certainly a legacy thing and maybe
> we shouldn't bother expending any extra code to make it work with
> new features.  Thoughts?

Yes, it's legacy.  I wouldn't bother.



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Magnus Hagander
Дата:
Сообщение: Re: Common Table Expressions applied; some issues remain
Следующее
От: Gregory Stark
Дата:
Сообщение: Re: Common Table Expressions applied; some issues remain