Thread

  1. Re: Add SPLIT PARTITION/MERGE PARTITIONS commands

    Dmitry Koval <d.koval@postgrespro.ru> — 2025-06-04T19:44:26Z

    Hi!
    Thank you very much for review.
    
    1.
     >you can put it into one INSERT. like
     >INSERT INTO sales_range VALUES (1,  'May',      1000, '2022-01-31'),
     >(1,  'May',      1000, '2022-01-31');
     >which can make the regress test faster.
     >(apply the logic to other places in 
    src/test/regress/sql/partition_merge.sql)
    
    Test changed.
    
    
    2.
     >+ errmsg("partition of hash-partitioned table cannot be merged")));
     >This error case doesn't seem to have a related test, and adding one
     >would be great.
    
    Added test for hash partitioned table.
    
    
    3.
     >per
     >https://www.postgresql.org/docs/current/error-message-reporting.html
     >"The extra parentheses were required before PostgreSQL version 12, but
     >are now optional."
     >so now you can remove the extra parentheses.
    
    Extra parentheses removed.
    
    
    4.
     >we can make the first error message like the second one.
     >errmsg("\"%s\" is not a partition of \"%s\"....)
    
    Error message
    errmsg("relation \"%s\" is not a partition of relation \"%s\""
    occurs in two more places in the code.
    I think it's better to keep this error message (for consistency).
    
    
    5.
     >+ errmsg("list of new partitions should contain at least two items")));
     >This also seems to have no tests.
     >adding a dummy one should be ok.
    
    Test added.
    
    
    6.
     >We added List *partlist into PartitionCmd
     >typedef struct PartitionCmd
     >we should use
     >cmd->partlist = NIL;
     >instead of
     >cmd->partlist = NULL;
     >We also need comments explaining PartitionCmd.name
     >meaning for ALTER TABLE MERGE PARTITIONS INTO?
    
    Fixed.
    
    
    7.
    
     >transformPartitionCmdForMerge
     >+ partOid = RangeVarGetRelid(name, NoLock, false);
     >here "NoLock" seems not right?
    
    AccessExclusiveLock on partitioned table protects only the DEFAULT 
    partition. Fixed.
    
    
    P.S. Similar changes were made for the second commit with SPLIT PARTITION.
    
    -- 
    With best regards,
    Dmitry Koval
    
    Postgres Professional: http://postgrespro.com