• Tom Lane's avatar
    Restructure CLUSTER/newstyle VACUUM FULL/ALTER TABLE support so that swapping · 9727c583
    Tom Lane authored
    of old and new toast tables can be done either at the logical level (by
    swapping the heaps' reltoastrelid links) or at the physical level (by swapping
    the relfilenodes of the toast tables and their indexes).  This is necessary
    infrastructure for upcoming changes to support CLUSTER/VAC FULL on shared
    system catalogs, where we cannot change reltoastrelid.  The physical swap
    saves a few catalog updates too.
    
    We unfortunately have to keep the logical-level swap logic because in some
    cases we will be adding or deleting a toast table, so there's no possibility
    of a physical swap.  However, that only happens as a consequence of schema
    changes in the table, which we do not need to support for system catalogs,
    so such cases aren't an obstacle for that.
    
    In passing, refactor the cluster support functions a little bit to eliminate
    unnecessarily-duplicated code; and fix the problem that while CLUSTER had
    been taught to rename the final toast table at need, ALTER TABLE had not.
    9727c583
tablecmds.c 238 KB