pgsql: Ensure we have a snapshot when updating pg_index entries.

From: Nathan Bossart <nathan(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Ensure we have a snapshot when updating pg_index entries.
Date: 2024-09-26 20:51:41
Message-ID: E1stvSf-0013uJ-2N@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Ensure we have a snapshot when updating pg_index entries.

Creating, reindexing, and dropping an index concurrently could
entail accessing pg_index's TOAST table, which was recently added
in commit b52c4fc3c0. These code paths start and commit their own
transactions, but they do not always set an active snapshot. This
rightfully leads to assertion failures and ERRORs when trying to
access pg_index's TOAST table, such as the following:

ERROR: cannot fetch toast data without an active snapshot

To fix, push an active snapshot just before each section of code
that might require accessing pg_index's TOAST table, and pop it
shortly afterwards.

Reported-by: Alexander Lakhin
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/a97d7401-e7c9-f771-6a00-037379f0a8bb%40gmail.com

Branch
------
master

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

Modified Files
--------------
src/backend/catalog/index.c | 21 +++++++++++++++++++++
src/backend/commands/indexcmds.c | 24 ++++++++++++++++++++++++
src/test/regress/expected/indexing.out | 15 +++++++++++++++
src/test/regress/sql/indexing.sql | 16 ++++++++++++++++
4 files changed, 76 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2024-09-26 22:04:19 Re: pgsql: Implement pg_wal_replay_wait() stored procedure
Previous Message Nathan Bossart 2024-09-26 18:56:10 pgsql: Improve style of pg_upgrade task callback functions.