• Alvaro Herrera's avatar
    Make pg_dump emit ATTACH PARTITION instead of PARTITION OF (reprise) · 33a53130
    Alvaro Herrera authored
    Using PARTITION OF can result in column ordering being changed from the
    database being dumped, if the partition uses a column layout different
    from the parent's.  It's not pg_dump's job to editorialize on table
    definitions, so this is not acceptable; back-patch all the way back to
    pg10, where partitioned tables where introduced.
    
    This change also ensures that partitions end up in the correct
    tablespace, if different from the parent's; this is an oversight in
    ca410302 (in pg12 only).  Partitioned indexes (in pg11) don't have
    this problem, because they're already created as independent indexes and
    attached to their parents afterwards.
    
    This change also has the advantage that the partition is restorable from
    the dump (as a standalone table) even if its parent table isn't
    restored.
    
    The original commits (3b23552a in branch master) failed to cover
    subsidiary column elements correctly, such as NOT NULL constraint and
    CHECK constraints, as reported by Rushabh Lathia (initially as a failure
    to restore serial columns).  They were reverted.  This recapitulation
    commit fixes those problems.
    
    Add some pg_dump tests to verify these things more exhaustively,
    including constraints with legacy-inheritance tables, which were not
    tested originally.  In branches 10 and 11, add a local constraint to the
    pg_dump test partition that was added by commit 2d7eeb1b to master.
    
    Author: Álvaro Herrera, David Rowley
    Reviewed-by: Álvaro Herrera
    Discussion: https://postgr.es/m/CAKJS1f_1c260nOt_vBJ067AZ3JXptXVRohDVMLEBmudX1YEx-A@mail.gmail.com
    Discussion: https://postgr.es/m/20190423185007.GA27954@alvherre.pgsql
    Discussion: https://postgr.es/m/CAGPqQf0iQV=PPOv2Btog9J9AwOQp6HmuVd6SbGTR_v3Zp2XT1w@mail.gmail.com
    33a53130
002_pg_dump.pl 101 KB