Re: Abitity to identify the current iteration in a recursive SELECT (feature request)

From: Greg Sabino Mullane <htamfids(at)gmail(dot)com>
To: sulfinu(at)gmail(dot)com
Cc: pgsql-sql(at)lists(dot)postgresql(dot)org
Subject: Re: Abitity to identify the current iteration in a recursive SELECT (feature request)
Date: 2024-12-18 14:06:40
Message-ID: CAKAnmmL34MAd436EJxXx6vV-3QHQvQDr3TQb5AjbuyzEwm=GKw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Wed, Dec 18, 2024 at 5:00 AM <sulfinu(at)gmail(dot)com> wrote:

> Is there a way to obtain directly this iteration sequence number within
> the SELECT statement following the UNION keyword in a recursive
> construction? I know it can by obtained by maintaining its value in a
> working table column, but that's suboptimal - I need it as a "magic"
> variable, akin, for example, the excluded variable available inside the ON
> CONFLICT DO UPDATE clause of an INSERT statement.
>

Do you mean something like "... WHERE pg_magic_iteration_number < 10"?
Looking at the source code, I don't see a trivial way to accomplish that.
Maintaining the count as a column in your select is still the canonical
way. As someone who writes a lot of recursive CTEs (especially each
December!), I'm not sure how useful this feature would be, as the number of
loops is rarely the criteria for ending the iterations.

I'm using the a recursive SELECT in order to join iteratively several
> (virtual) tables computed dinamically based on the iteration number.
>

Certainly the best solution is to use pl/pgsql, which gets you iterative
loops, lots of introspection and ways to break out of the loop, and even
true recursion.

Cheers,
Greg

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message sulfinu 2024-12-19 09:16:47 Re: Abitity to identify the current iteration in a recursive SELECT (feature request)
Previous Message sulfinu 2024-12-16 10:21:03 Abitity to identify the current iteration in a recursive SELECT (feature request)