Thread
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Avoid ERROR at ON COMMIT DELETE ROWS after relhassubclass=f.
- d34b671a63e6 13.21 landed
- a61b67cd06c2 14.18 landed
- e0f53e669969 15.13 landed
- d0a049987e5a 17.5 landed
- 5905e9935999 16.9 landed
- 2d5350cfbdc6 18.0 landed
-
Fix data loss at inplace update after heap_update().
- a07e03fd8fa7 18.0 cited
-
Don't lose partitioned table reltuples=0 after relhassubclass=f.
- 7102070329d8 18.0 cited
-
ERROR: tuple to be updated was already modified by an operation triggered by the current command
Richard Guo <guofenglinux@gmail.com> — 2025-01-23T09:11:44Z
I came across $SUBJECT, which can be reproduced using the queries below. # create temporary table p (a int primary key) on commit delete rows; CREATE TABLE # create temporary table c () inherits (p); CREATE TABLE # analyze; -- no error ANALYZE # drop table c; DROP TABLE # analyze; -- error ERROR: tuple to be updated was already modified by an operation triggered by the current command This error happens in heap_inplace_lock(), and git-bisect says the first bad commit is: a07e03fd8fa7daf4d1356f7cb501ffe784ea6257 is the first bad commit commit a07e03fd8fa7daf4d1356f7cb501ffe784ea6257 Author: Noah Misch <noah@leadboat.com> Date: Tue Sep 24 15:25:18 2024 -0700 Fix data loss at inplace update after heap_update(). ... which introduced heap_inplace_lock(). Is this error expected, or could it be a bug? Thanks Richard -
Re: ERROR: tuple to be updated was already modified by an operation triggered by the current command
Robins Tharakan <tharakan@gmail.com> — 2025-04-11T12:48:04Z
Hi, On Thu, 23 Jan 2025 at 19:42, Richard Guo <guofenglinux@gmail.com> wrote: > > I came across $SUBJECT, which can be reproduced using the queries > below. I also stepped a few times on this the past few days. Here's a smaller repro: $ grep -l -B100 "tuple to be updated was already modified by an operation triggered by the current command" */source | xargs -i grep Assertion {} --java.lang.AssertionError: ANALYZE; --java.lang.AssertionError: ANALYZE( SKIP_LOCKED); --java.lang.AssertionError: ANALYZE; --java.lang.AssertionError: ANALYZE( VERBOSE); --java.lang.AssertionError: ANALYZE( VERBOSE); Repro SQL ========= CREATE TEMPORARY TABLE a(b boolean , UNIQUE(b)) ON COMMIT DELETE ROWS ; CREATE TEMP TABLE d() INHERITS(a) ON COMMIT DROP ; ANALYSE; SQL Output ========== $ psql postgres -f a.sql CREATE TABLE CREATE TABLE psql:a.sql:6: ERROR: tuple to be updated was already modified by an operation triggered by the current command > > This error happens in heap_inplace_lock(), and git-bisect says the > first bad commit is: > > a07e03fd8fa7daf4d1356f7cb501ffe784ea6257 is the first bad commit I also arrived at the same commit. Checking (914ea1c93c0~0) - 914ea1c93c - fail (1) Checking (914ea1c93c0~10) - d89335eea6 - fail (1) Checking (914ea1c93c0~30) - b0a4c3e88b - fail (1) Checking (914ea1c93c0~70) - 57dec20fd4 - fail (1) . . Checking (914ea1c93c0~1688) - a07e03fd8f - fail (1) Checking (914ea1c93c0~1689) - dbf3f974ee - pass (0) Surfacing Commit is a07e03fd8fa7daf4d1356f7cb501ffe784ea6257 Found using SQLancer / creduce. - robins https://robins.in -
Re: ERROR: tuple to be updated was already modified by an operation triggered by the current command
Noah Misch <noah@leadboat.com> — 2025-04-11T14:41:33Z
On Fri, Apr 11, 2025 at 10:18:04PM +0930, Robins Tharakan wrote: > On Thu, 23 Jan 2025 at 19:42, Richard Guo <guofenglinux@gmail.com> wrote: > Repro SQL > ========= > CREATE TEMPORARY TABLE a(b boolean , UNIQUE(b)) ON COMMIT DELETE ROWS ; > CREATE TEMP TABLE d() INHERITS(a) ON COMMIT DROP ; > ANALYSE; Confirmed. Thanks for the report. This is a variant of the bug that commit 7102070 fixed. Key events: - The second CREATE sets relhassubclass=t on "a". - ANALYZE does heap_update() to set relhassubclass=f, since ON COMMIT DROP removed the child. - ON COMMIT DELETE ROWS does an empty index build at end-of-xact, which does an inplace update on the pg_class row of "a". There was no CommandCounterIncrement() since the heap_update(), hence this error. Changing to "ANALYSE a" makes the error go away, because standard_ProcessUtility() does a CCI (added for bug #15631). So I'm inclined to fix that by putting the CCI here for plain "ANALYSE": --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -657,6 +657,8 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, if (use_own_xacts) { PopActiveSnapshot(); + /* standard_ProcessUtility() does CCI if !use_own_xacts */ + CommandCounterIncrement(); CommitTransactionCommand(); } else > > This error happens in heap_inplace_lock(), and git-bisect says the > > first bad commit is: > > > > a07e03fd8fa7daf4d1356f7cb501ffe784ea6257 is the first bad commit That commit made it an error to inplace-update an invisible tuple; before that, we silently lost the inplace update. -
Re: ERROR: tuple to be updated was already modified by an operation triggered by the current command
Noah Misch <noah@leadboat.com> — 2025-04-21T04:06:05Z
On Fri, Apr 11, 2025 at 07:41:33AM -0700, Noah Misch wrote: > On Fri, Apr 11, 2025 at 10:18:04PM +0930, Robins Tharakan wrote: > > On Thu, 23 Jan 2025 at 19:42, Richard Guo <guofenglinux@gmail.com> wrote: > > > Repro SQL > > ========= > > CREATE TEMPORARY TABLE a(b boolean , UNIQUE(b)) ON COMMIT DELETE ROWS ; > > CREATE TEMP TABLE d() INHERITS(a) ON COMMIT DROP ; > > ANALYSE; > --- a/src/backend/commands/vacuum.c > +++ b/src/backend/commands/vacuum.c > @@ -657,6 +657,8 @@ vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, > if (use_own_xacts) > { > PopActiveSnapshot(); > + /* standard_ProcessUtility() does CCI if !use_own_xacts */ > + CommandCounterIncrement(); > CommitTransactionCommand(); Pushed: postgr.es/c/2d5350c