postgres.git / summary / log / commit / refs

commit    a5ea825f958c2de9fadb825cbf16bf9b1360f0df
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Fri Jul 14 02:15:34 2023 +0000
First released in: 17.0, 11.21, 12.16, 13.12, 14.9, 15.4, 16.0

    Add indisreplident to fields refreshed by RelationReloadIndexInfo()
    
    RelationReloadIndexInfo() is a fast-path used for index reloads in the
    relation cache, and it has always forgotten about updating
    indisreplident, which is something that would happen after an index is
    selected for a replica identity.  This can lead to incorrect cache
    information provided when executing a command in a transaction context
    that updates indisreplident.
    
    None of the code paths currently on HEAD that need to check upon
    pg_index.indisreplident fetch its value from the relation cache, always
    relying on a fresh copy on the syscache.  Unfortunately, this may not be
    the case of out-of-core code, that could see out-of-date value.
    
    Author: Shruthi Gowda
    Reviewed-by: Robert Haas, Dilip Kumar, Michael Paquier
    Discussion: https://postgr.es/m/CAASxf_PBcxax0wW-3gErUyftZ0XrCs3Lrpuhq4-Z3Fak1DoW7Q@mail.gmail.com
    Backpatch-through: 11


src/backend/utils/cache/relcache.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 8a08463c2b7..8e28335915f 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -2305,6 +2305,7 @@ RelationReloadIndexInfo(Relation relation) relation->rd_index->indcheckxmin = index->indcheckxmin; relation->rd_index->indisready = index->indisready; relation->rd_index->indislive = index->indislive; + relation->rd_index->indisreplident = index->indisreplident; /* Copy xmin too, as that is needed to make sense of indcheckxmin */ HeapTupleHeaderSetXmin(relation->rd_indextuple->t_data, [parent: 38ea6aa90e61]