pgsql: For inplace update, send nontransactional invalidations. - Mailing list pgsql-committers

From Noah Misch
Subject pgsql: For inplace update, send nontransactional invalidations.
Date
Msg-id E1t4KjF-002ON3-7i@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
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_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/e3914bd136e467b3af7e5a334e0e753df2a13f53

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               | 261 +++++++++++++++++++-------
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, 290 insertions(+), 118 deletions(-)


pgsql-committers by date:

Previous
From: Daniel Gustafsson
Date:
Subject: pgsql: doc: Fix typo in pg_restore_*_stats function documentation
Next
From: Melanie Plageman
Date:
Subject: pgsql: Make table_scan_bitmap_next_block() async-friendly