pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Noah Misch <noah@leadboat.com>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: For inplace update, send nontransactional invalidations.
Date: Wed, 17 Dec 2025 00:14:48 +0000
Message-ID: <E1vVfBn-0019OH-1e@gemulon.postgresql.org> (raw)

For inplace update, send nontransactional invalidations.

The inplace update survives ROLLBACK.  The inval didn't, so another
backend's DDL could then update the row without incorporating the
inplace update.  In the test this fixes, a mix of CREATE INDEX and ALTER
TABLE resulted in a table with an index, yet relhasindex=f.  That is a
source of index corruption.

Back-patch to v14 - v17.  This is a back-patch of commits:

- 243e9b40f1b2dd09d6e5bf91ebf6e822a2cd3704
  (main change, on master, before v18 branched)
- 0bada39c83a150079567a6e97b1a25a198f30ea3
  (defect fix, on master, before v18 branched)
- bae8ca82fd00603ebafa0658640d6e4dfe20af92
  (cosmetics from post-commit review, on REL_18_STABLE)

It reverses commit c1099dd745b0135960895caa8892a1873ac6cbe5, my revert
of the original back-patch of 243e9b4.

This back-patch omits the non-comment heap_decode() changes.  I find
those changes removed harmless code that was last necessary in v13.  See
discussion thread for details.  The back branches aren't the place to
remove such code.

Like the original back-patch, this doesn't change WAL, because these
branches use end-of-recovery SIResetAll().  All branches change the ABI
of extern function PrepareToInvalidateCacheTuple().  No PGXN extension
calls that, and there's no apparent use case in extensions.  Expect
".abi-compliance-history" edits to follow.

Reviewed-by: Paul A Jungwirth <pj@illuminatedcomputing.com>
Reviewed-by: Surya Poondla <s_poondla@apple.com>
Reviewed-by: Ilyasov Ian <ianilyasov@outlook.com>
Reviewed-by: Nitin Motiani <nitinmotiani@google.com> (in earlier versions)
Reviewed-by: Andres Freund <andres@anarazel.de> (in earlier versions)
Discussion: https://postgr.es/m/20240523000548.58.nmisch@google.com
Backpatch-through: 14-17

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/05d605b6c69f0276ae091ced1ed9082963052550

Modified Files
--------------
src/backend/access/heap/README.tuplock        |  32 +++
src/backend/access/heap/heapam.c              |  46 +++-
src/backend/access/transam/xact.c             |  26 ++-
src/backend/catalog/index.c                   |  11 +-
src/backend/replication/logical/decode.c      |  11 +-
src/backend/utils/cache/catcache.c            |   7 +-
src/backend/utils/cache/inval.c               | 320 +++++++++++++++++++-------
src/backend/utils/cache/syscache.c            |   3 +-
src/include/utils/catcache.h                  |   3 +-
src/include/utils/inval.h                     |   6 +
src/test/isolation/expected/inplace-inval.out |  10 +-
src/test/isolation/specs/inplace-inval.spec   |  12 +-
src/tools/pgindent/typedefs.list              |   1 +
13 files changed, 362 insertions(+), 126 deletions(-)



view thread (11+ messages)

Message-ID: <E1vVfBn-0019OH-1e@gemulon.postgresql.org>
Permalink:  ../E1vVfBn-0019OH-1e@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1vVfBn-0019OH-1e@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: noah@leadboat.com, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: For inplace update, send nontransactional invalidations.
  In-Reply-To: <E1vVfBn-0019OH-1e@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox