Re: SQL:2011 Application Time Update & Delete

SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com>

From: SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: Paul A Jungwirth <pj@illuminatedcomputing.com>, Chao Li <li.evan.chao@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-09T19:42:23Z
Lists: pgsql-hackers

Attachments

On Thu, Apr 9, 2026 at 12:35 PM SATYANARAYANA NARLAPURAM <
satyanarlapuram@gmail.com> wrote:

> Hi Paul, Peter,
>
> I found a Server crash when using UPDATE ... FOR PORTION OF or DELETE ...
> FOR PORTION OF on a view that has INSTEAD OF triggers.
>
> Repro:
>
> CREATE TABLE t (id INT, valid_at daterange, val INT);
> INSERT INTO t VALUES (1, '[2026-01-01,2026-12-31)', 100);
> CREATE VIEW v AS SELECT * FROM t;
>
> CREATE FUNCTION v_trig() RETURNS trigger LANGUAGE plpgsql AS $$
> BEGIN
>     UPDATE t SET val = NEW.val WHERE id = OLD.id;
>     RETURN NEW;
> END;
> $$;
> CREATE TRIGGER trg INSTEAD OF UPDATE ON v
>     FOR EACH ROW EXECUTE FUNCTION v_trig();
>
> -- This crashes the server:
> UPDATE v FOR PORTION OF valid_at FROM '2026-04-01' TO '2026-08-01'
>     SET val = 999 WHERE id = 1;
>
> I am thinking we should just reject this case. Attached a draft patch to
> fix the issue.
>

Patches attached now.

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