• Michael Paquier's avatar
    Make index_set_state_flags() transactional · 83158f74
    Michael Paquier authored
    3c840464 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 813fb031, so there is no actual
    reasons to not make this operation transactional.
    
    Note that while making the operation more robust, using a transactional
    operation in this routine was not strictly necessary as there was no use
    case for it yet.  However, some future features are going to need a
    transactional behavior, like support for CREATE/DROP INDEX CONCURRENTLY
    with partitioned tables, where indexes in a partition tree need to have
    all their pg_index.indis* flags updated in the same transaction to make
    the operation stable to the end-user by keeping partition trees
    consistent, even with a failure mid-flight.
    
    REINDEX CONCURRENTLY uses already transactional updates when swapping
    the old and new indexes, making this change more consistent with the
    index-swapping logic.
    
    Author: Michael Paquier
    Reviewed-by: Anastasia Lubennikova
    Discussion: https://postgr.es/m/20200903080440.GA8559@paquier.xyz
    83158f74
index.c 127 KB