pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Nathan Bossart <nathan@postgresql.org>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Ensure we have a snapshot when updating various system catalogs.
Date: Fri, 30 May 2025 20:18:20 +0000
Message-ID: <E1uL6BH-000lyg-0D@gemulon.postgresql.org> (raw)

Ensure we have a snapshot when updating various system catalogs.

A few places that access system catalogs don't set up an active
snapshot before potentially accessing their TOAST tables.  To fix,
push an active snapshot just before each section of code that might
require accessing one of these TOAST tables, and pop it shortly
afterwards.  While at it, this commit adds some rather strict
assertions in an attempt to prevent such issues in the future.

Commit 16bf24e0e4 recently removed pg_replication_origin's TOAST
table in order to fix the same problem for that catalog.  On the
back-branches, those bugs are left in place.  We cannot easily
remove a catalog's TOAST table on released major versions, and only
replication origins with extremely long names are affected.  Given
the low severity of the issue, fixing older versions doesn't seem
worth the trouble of significantly modifying the patch.

Also, on v13 and v14, the aforementioned strict assertions have
been omitted because commit 2776922201, which added
HaveRegisteredOrActiveSnapshot(), was not back-patched.  While we
could probably back-patch it now, I've opted against it because it
seems unlikely that new TOAST snapshot issues will be introduced in
the oldest supported versions.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/18127-fe54b6a667f29658%40postgresql.org
Discussion: https://postgr.es/m/18309-c0bf914950c46692%40postgresql.org
Discussion: https://postgr.es/m/ZvMSUPOqUU-VNADN%40nathan
Backpatch-through: 13

Branch
------
REL_17_STABLE

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

Modified Files
--------------
src/backend/access/heap/heapam.c         | 41 ++++++++++++++++++++++++++++++++
src/backend/commands/indexcmds.c         |  8 +++++++
src/backend/commands/tablecmds.c         |  8 +++++++
src/backend/postmaster/autovacuum.c      |  7 ++++++
src/backend/replication/logical/worker.c | 24 +++++++++++++++++++
5 files changed, 88 insertions(+)



view thread (8+ messages)  latest in thread

Message-ID: <E1uL6BH-000lyg-0D@gemulon.postgresql.org>
Permalink:  ../E1uL6BH-000lyg-0D@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1uL6BH-000lyg-0D@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: nathan@postgresql.org, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Ensure we have a snapshot when updating various system catalogs.
  In-Reply-To: <E1uL6BH-000lyg-0D@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