pgsql: Make index_set_state_flags() transactional

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Make index_set_state_flags() transactional
Date: 2021-06-28 01:46:17
Message-ID: E1lxgLp-0000rV-F0@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Make index_set_state_flags() transactional

3c84046 is the original commit that introduced index_set_state_flags(),
where the presence of SnapshotNow made necessary the use of an in-place
update. SnapshotNow has been removed in 813fb03, so there is no actual
reasons to not make this operation transactional.

As reported by Andrey, it is possible to trigger the assertion of this
routine expecting no transactional updates when switching the pg_index
state flags, using a predicate mark as immutable but calling stable or
volatile functions. 83158f7 has been around for a couple of months on
HEAD now with no issues found related to it, so it looks safe enough for
a backpatch.

Reported-by: Andrey Lepikhov
Author: Michael Paquier
Reviewed-by: Anastasia Lubennikova
Discussion: https://postgr.es/m/20200903080440.GA8559@paquier.xyz
Discussion: https://postgr.es/m/9b905019-5297-7372-0ad2-e1a4bb66a719@postgrespro.ru
Backpatch-through: 9.6

Branch
------
REL_13_STABLE

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

Modified Files
--------------
src/backend/catalog/index.c | 19 ++++---------------
1 file changed, 4 insertions(+), 15 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2021-06-28 02:19:02 pgsql: Add test for CREATE INDEX CONCURRENTLY with not-so-immutable pre
Previous Message Tom Lane 2021-06-27 16:45:29 pgsql: Remove memory leaks in isolationtester.