• Andres Freund's avatar
    Allow pg_class xid & multixid horizons to not be set. · fdc7efcc
    Andres Freund authored
    This allows table AMs that don't need these horizons. This was already
    documented in the tableam relation_set_new_filenode callback, but an
    assert prevented if from actually working (the test AM code contained
    the change itself). Defang the asserts in the general code, and move
    the stronger ones into heap AM.
    
    Relatedly, after CLUSTER/VACUUM, we'd always assign a relfrozenxid /
    relminmxid. Change the table_relation_copy_for_cluster() interface to
    allow the AM to overwrite the horizons that get set on the pg_class
    entry.  This'd also in the future allow AMs like heap to compute a
    relfrozenxid during rewrite that's the table's actual minimum rather
    than a pre-determined value.  Arguably it'd have been better to move
    the whole computation / setting of those values into the callback, but
    it seems likely that for other reasons it'd be better to be able to
    use one value to vacuum/cluster multiple tables (e.g. a toast's
    horizon shouldn't be different than the table's).
    
    Reported-By: Heikki Linnakangas
    Author: Andres Freund
    Discussion: https://postgr.es/m/9a7fb9cc-2419-5db7-8840-ddc10c93f122@iki.fi
    fdc7efcc
cluster.c 50.9 KB