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: Fri, 25 Oct 2024 13:51:48 +0000
Message-ID: <E1t4KjF-002ONB-9E@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 v12 (all supported versions).
The back branch versions don't change WAL, because those branches just
added 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.

Reviewed by Nitin Motiani and (in earlier versions) Andres Freund.

Discussion: https://postgr.es/m/20240523000548.58.nmisch@google.com

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/0ea9d40a667960ad5cca5f537bb88d3bf6038379

Modified Files
--------------
src/backend/access/heap/heapam.c              |  43 ++++-
src/backend/access/transam/xact.c             |  26 ++-
src/backend/catalog/index.c                   |  11 +-
src/backend/replication/logical/decode.c      |  26 ++-
src/backend/utils/cache/catcache.c            |   7 +-
src/backend/utils/cache/inval.c               | 259 +++++++++++++++++++-------
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 +-
11 files changed, 289 insertions(+), 117 deletions(-)



view thread (11+ messages)  latest in thread

Message-ID: <E1t4KjF-002ONB-9E@gemulon.postgresql.org>
Permalink:  ../E1t4KjF-002ONB-9E@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1t4KjF-002ONB-9E@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: <E1t4KjF-002ONB-9E@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