• Michael Paquier's avatar
    Refactor code in tablecmds.c to check and process tablespace moves · 4c9c359d
    Michael Paquier authored
    Two code paths of tablecmds.c (for relations with storage and without
    storage) use the same logic to check if the move of a relation to a
    new tablespace is allowed or not and to update pg_class.reltablespace
    and pg_class.relfilenode.
    
    A potential TABLESPACE clause for REINDEX, CLUSTER and VACUUM FULL needs
    similar checks to make sure that nothing is moved around in illegal ways
    (no mapped relations, shared relations only in pg_global, no move of
    temp tables owned by other backends).
    
    This reorganizes the existing code of ALTER TABLE so as all this logic
    is controlled by two new routines that can be reused for the other
    commands able to move relations across tablespaces, limiting the number
    of code paths in need of the same protections.  This also removes some
    code that was duplicated for tables with and without storage for ALTER
    TABLE.
    
    Author: Alexey Kondratov, Michael Paquier
    Discussion: https://postgr.es/m/YA+9mAMWYLXJMVPL@paquier.xyz
    4c9c359d
tablecmds.h 3.4 KB