Re: SQL:2011 Application Time Update & Delete

Paul A Jungwirth <pj@illuminatedcomputing.com>

From: Paul A Jungwirth <pj@illuminatedcomputing.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Peter Eisentraut <peter@eisentraut.org>, Chao Li <li.evan.chao@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-20T15:48:31Z
Lists: pgsql-hackers
On Mon, Apr 20, 2026 at 7:33 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> > I was curious why execSRF.c uses `rsinfo.isDone != ExprMultipleResult`
> > for the finalize parameter, because I don't think a SRF should ever
> > return ExprSingleResult, right? So I guess it is just to be cautious.
> > Makes sense. I followed that approach.
>
> It's been awhile, but I think these specs were set with the intention
> that if a plain function were somehow called as a SRF, it would act as
> though it were a SRF returning one row.  We haven't quite reached that
> with this patch --- I think it'd be an infinite loop as
> ExecForPortionOfLeftovers() stands.  I'm content with the way things
> are though, given that it should always be the case that special
> privileges are needed to mark a function as being a
> withoutPortionProcs function.
>
> But speaking of infinite loops, should this one contain a
> CHECK_FOR_INTERRUPTS call?  It's hard to conceive of a case where
> the value would be broken down finely enough for that to be a
> problem, but ...

A rangetype could only loop 0-2 times; a multirange 0-1. So I don't
think we need it. Eventually user-defined types could loop more, but a
design that inserts many records every time you change something seems
like a bad idea. Maybe I would add it anyway just out of caution, but
I suspect it's excessive.

Yours,

-- 
Paul              ~{:-)
pj@illuminatedcomputing.com



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Make ExecForPortionOfLeftovers() obey SRF protocol.

  2. Add isolation tests for UPDATE/DELETE FOR PORTION OF

  3. Add UPDATE/DELETE FOR PORTION OF

  4. Record range constructor functions in pg_range

  5. Add range_minus_multi and multirange_minus_multi functions

  6. doc: Add section for temporal tables

  7. Add assertion check for WAL receiver state during stream-archive transition