• Alvaro Herrera's avatar
    Revert changes to CONCURRENTLY that "sped up" Xmin advance · 042b584c
    Alvaro Herrera authored
    This reverts commit d9d07622 "VACUUM: ignore indexing operations
    with CONCURRENTLY".
    
    These changes caused indexes created with the CONCURRENTLY option to
    miss heap tuples that were HOT-updated and HOT-pruned during the index
    creation.  Before these changes, HOT pruning would have been prevented
    by the Xmin of the transaction creating the index, but because this
    change was precisely to allow the Xmin to move forward ignoring that
    backend, now other backends scanning the table can prune them.  This is
    not a problem for VACUUM (which requires a lock that conflicts with a
    CREATE INDEX CONCURRENTLY operation), but HOT-prune can definitely
    occur.  In other words, Xmin advancement was sped up, but at the cost of
    corrupting the resulting index.
    
    Regrettably, this means that the new feature in PG14 that RIC/CIC on
    very large tables no longer force VACUUM to retain very old tuples goes
    away.  We might try to implement it again in a later release, but for
    now the risk of indexes missing tuples is too high and there's no easy
    fix.
    
    Backpatch to 14, where this change appeared.
    Reported-by: default avatarPeter Slavov <pet.slavov@gmail.com>
    Diagnosys-by: default avatarAndrey Borodin <x4mmm@yandex-team.ru>
    Diagnosys-by: default avatarMichael Paquier <michael@paquier.xyz>
    Diagnosys-by: default avatarAndres Freund <andres@anarazel.de>
    Discussion: https://postgr.es/m/17485-396609c6925b982d%40postgresql.org
    042b584c
reindex.sgml 20.5 KB