postgres.git / summary / log / commit / refs

commit    bdaaf1bf1d90d8c510f18f81edbe90e54262c9df
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Fri Jul 14 02:16:10 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 c37e43a9044..ad5511247a4 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -2318,6 +2318,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: c89d74c18b50]