• Andres Freund's avatar
    Fix wrong data table horizon computation during backend startup. · 1c7675a7
    Andres Freund authored
    When ComputeXidHorizons() was called before MyDatabaseOid is set,
    e.g. because a dead row in a shared relation is encountered during
    InitPostgres(), the horizon for normal tables was computed too
    aggressively, ignoring all backends connected to a database.
    
    During subsequent pruning in a data table the too aggressive horizon
    could end up still being used, possibly leading to still needed tuples
    being removed. Not good.
    
    This is a bug in dc7420c2, which the test added in 94bc27b5 made
    visible, if run with force_parallel_mode set to regress. In that case
    the bug is reliably triggered, because "pruning_query" is run in a
    parallel worker and the start of that parallel worker is likely to
    encounter a dead row in pg_database.
    
    The fix is trivial: Compute a more pessimistic data table horizon if
    MyDatabaseId is not yet known.
    
    Author: Andres Freund
    Discussion: https://postgr.es/m/20201029040030.p4osrmaywhqaesd4@alap3.anarazel.de
    1c7675a7
procarray.c 157 KB