When UPDATE a row in a table with BEFORE ROW UPDATE trigger, the XMAX of new tuple is set to current XID

From: Charles Qi <qyqgpower(at)gmail(dot)com>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: When UPDATE a row in a table with BEFORE ROW UPDATE trigger, the XMAX of new tuple is set to current XID
Date: 2025-08-06 12:37:49
Message-ID: CAEawgcJN2V0MTzZu5gi=csNapnJzogxJJqUFSphu6r=OXjorng@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general

And if we do the updates in multiple subtransactions, multixact will be
created, which is not created when the BEFORE ROW UPDATE trigger is absent.

Is this behavior by design? If so, what is the purpose for the behavior?

Tested version:
PostgreSQL 14.18 (Ubuntu 14.18-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu,
compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit

The attached file reproduce.sql can be used to reproduce the behavior.

Attachment Content-Type Size
reproduce.sql application/octet-stream 3.3 KB

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Philip Semanchuk 2025-08-06 13:16:50 Re: Stored procedures or raw queries
Previous Message Pavel Stehule 2025-08-06 12:11:43 Re: Stored procedures or raw queries