pgsql: doc: clarify recursion internal behavior

Started by Bruce Momjianalmost 4 years ago5 messagescomitters
Jump to latest
#1Bruce Momjian
bruce@momjian.us

doc: clarify recursion internal behavior

Reported-by: Drew DeVault

Discussion: /messages/by-id/20211018091720.31299-1-sir@cmpwn.com

Backpatch-through: 10

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8ec6a4ef3c3a6aa08f2cc235fab8c691a8b2f341

Modified Files
--------------
doc/src/sgml/queries.sgml | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#1)
Re: pgsql: doc: clarify recursion internal behavior

On 03.09.22 03:58, Bruce Momjian wrote:

doc: clarify recursion internal behavior

-    Strictly speaking, this process is iteration not recursion, but
-    <literal>RECURSIVE</literal> is the terminology chosen by the SQL 
standards
-    committee.
+    While <literal>RECURSIVE</literal> allows queries to be specified
+    recursively, internally all queries are evaluated iteratively.

Is that true? Surely there is some recursive behavior in the executor.

#3Robert Haas
robertmhaas@gmail.com
In reply to: Peter Eisentraut (#2)
Re: pgsql: doc: clarify recursion internal behavior

On Thu, Sep 8, 2022 at 7:24 AM Peter Eisentraut
<peter.eisentraut@enterprisedb.com> wrote:

On 03.09.22 03:58, Bruce Momjian wrote:

doc: clarify recursion internal behavior

-    Strictly speaking, this process is iteration not recursion, but
-    <literal>RECURSIVE</literal> is the terminology chosen by the SQL
standards
-    committee.
+    While <literal>RECURSIVE</literal> allows queries to be specified
+    recursively, internally all queries are evaluated iteratively.

Is that true? Surely there is some recursive behavior in the executor.

I haven't read the patch, but I think the claim shown here is correct.
The executor does recurse in general in that ExecProcNode() is reached
over and over again at different levels of the call stack, but I don't
think that recursive queries cause that to happen any more than it
would otherwise. I think we allocate the first branch of the recursive
query once and then the second one over and over in a loop until we're
done.

--
Robert Haas
EDB: http://www.enterprisedb.com

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#3)
Re: pgsql: doc: clarify recursion internal behavior

Robert Haas <robertmhaas@gmail.com> writes:

On Thu, Sep 8, 2022 at 7:24 AM Peter Eisentraut
<peter.eisentraut@enterprisedb.com> wrote:

On 03.09.22 03:58, Bruce Momjian wrote:

+    While <literal>RECURSIVE</literal> allows queries to be specified
+    recursively, internally all queries are evaluated iteratively.

Is that true? Surely there is some recursive behavior in the executor.

I haven't read the patch, but I think the claim shown here is correct.

I'd be happier if it read "such queries" instead of "all queries".
The latter is an extremely broad claim, and you have to ignore cases
like recursive SQL functions in order to even argue it's true.

regards, tom lane

#5Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#4)
Re: pgsql: doc: clarify recursion internal behavior

On Thu, Sep 8, 2022 at 11:30:04AM -0400, Tom Lane wrote:

Robert Haas <robertmhaas@gmail.com> writes:

On Thu, Sep 8, 2022 at 7:24 AM Peter Eisentraut
<peter.eisentraut@enterprisedb.com> wrote:

On 03.09.22 03:58, Bruce Momjian wrote:

+    While <literal>RECURSIVE</literal> allows queries to be specified
+    recursively, internally all queries are evaluated iteratively.

Is that true? Surely there is some recursive behavior in the executor.

I haven't read the patch, but I think the claim shown here is correct.

I'd be happier if it read "such queries" instead of "all queries".
The latter is an extremely broad claim, and you have to ignore cases
like recursive SQL functions in order to even argue it's true.

Done in the attached applied patch.

--
Bruce Momjian <bruce@momjian.us> https://momjian.us
EDB https://enterprisedb.com

Indecision is a decision. Inaction is an action. Mark Batterson

Attachments:

master.difftext/x-diff; charset=us-asciiDownload+1-1