postgres-github.git / summary / log / commit / refs

commit    e64a9ba2b4fcd8956369ac6e2146ac816e590df2
Author:   Alexander Korotkov <akorotkov@postgresql.org>
Date:     Mon May 25 08:57:42 2026 +0000

    Reject degenerate SPLIT PARTITION with DEFAULT partition
    
    ALTER TABLE ... SPLIT PARTITION allows a DEFAULT partition to be created
    as one of the replacement partitions when the parent table does not
    already have one.  However, it should not allow the degenerate case where
    a non-DEFAULT partition keeps exactly the same bound as the split
    partition and the command merely adds a DEFAULT partition through the
    SPLIT PARTITION path.
    
    Detect that case by comparing the bound of the split partition with the
    bound of the only non-DEFAULT replacement partition, and raise an error
    when they are the same.  Users should add a DEFAULT partition directly
    with CREATE TABLE ... PARTITION OF ... DEFAULT or ALTER TABLE ... ATTACH
    PARTITION ... DEFAULT instead.
    
    The comparison goes through the partition operator family rather than
    byte equality so that values which are binary-different but compare
    equal under the partition key's comparator are treated as the same
    bound.  The corresponding regression test uses a float8 LIST partition
    with -0.0 and 0.0 -- they have different bit patterns but are equal
    under float8 -- to verify that a datumIsEqual()-based check would let
    the degenerate split through while the partsupfunc-based check
    correctly rejects it.
    
    Author: Chao Li <lic@highgo.com>
    Reviewed-by: Alexander Korotkov <aekorotkov@gmail.com>
    Discussion: https://postgr.es/m/C18878AB-DEB2-4A61-9995-A035DD644B81@gmail.com