• Michael Paquier's avatar
    Fix handling of expressions and predicates in REINDEX CONCURRENTLY · 7cce1593
    Michael Paquier authored
    When copying the definition of an index rebuilt concurrently for the new
    entry, the index information was taken directly from the old index using
    the relation cache.  In this case, predicates and expressions have
    some post-processing to prepare things for the planner, which loses some
    information including the collations added in any of them.
    
    This inconsistency can cause issues when attempting for example a table
    rewrite, and makes the new indexes rebuilt concurrently inconsistent
    with the old entries.
    
    In order to fix the problem, fetch expressions and predicates directly
    from the catalog of the old entry, and fill in IndexInfo for the new
    index with that.  This makes the process more consistent with
    DefineIndex(), and the code is refactored with the addition of a routine
    to create an IndexInfo node.
    
    Reported-by: Manuel Rigger
    Author: Michael Paquier
    Discussion: https://postgr.es/m/CA+u7OA5Hp0ra235F3czPom_FyAd-3+XwSJmX95r1+sRPOJc9VQ@mail.gmail.com
    Backpatch-through: 12
    7cce1593
index.c 121 KB