pgsql: Ensure we have a snapshot when updating pg_index entries. - Mailing list pgsql-committers

From Nathan Bossart
Subject pgsql: Ensure we have a snapshot when updating pg_index entries.
Date
Msg-id E1stvSf-0013uJ-2N@gemulon.postgresql.org
Whole thread Raw
List 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(+)


pgsql-committers by date:

Previous
From: Nathan Bossart
Date:
Subject: pgsql: Improve style of pg_upgrade task callback functions.
Next
From: Michael Paquier
Date:
Subject: pgsql: Fix catalog data of new LO privilege functions