Re: Add SPLIT PARTITION/MERGE PARTITIONS commands

Dmitry Koval <d.koval@postgrespro.ru>

From: Dmitry Koval <d.koval@postgrespro.ru>
To: Pavel Borisov <pashkin.elfe@gmail.com>, Justin Pryzby <pryzby@telsasoft.com>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2026-06-26T15:20:18Z
Lists: pgsql-hackers
Hi!

If we exclude case with DEFAULT partition, MERGE PARTITIONS command was
intended to be used when an incorrect table partitioning was chosen.
For example, a table was initially partitioned by month, but later we
needed to change table partitioning by quarter. In this case, MERGE
PARTITIONS command should merge several adjacent partitions into one.
Current checks are made for this case.

 >- If there's *no* default partition, then I think the check should be
 >relaxed; it's sufficient to verify that the bounds of the merged
 >partition do not overlap with any partition which is not being merged;

It's probably possible to do this. But in this case, the command will
not exactly be "MERGE PARTITIONS" ("MERGE PARTITIONS & EXPAND"?).

-- 
With best regards,
Dmitry Koval

Postgres Professional: http://postgrespro.com




Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. doc: clarify MERGE PARTITIONS adjacency requirement

  2. Take into account default_tablespace during MERGE/SPLIT PARTITION(S)

  3. Create TOAST table for partitions made by MERGE/SPLIT PARTITION

  4. Adjust errcode in checkPartition()

  5. Fix usage of palloc() in MERGE/SPLIT PARTITION(s) code

  6. Implement ALTER TABLE ... SPLIT PARTITION ... command

  7. Implement ALTER TABLE ... MERGE PARTITIONS ... command

  8. Calculate agglevelsup correctly when Aggref contains a CTE.

  9. Use PqMsg_* macros in applyparallelworker.c.

  10. Restrict psql meta-commands in plain-text dumps.

  11. Ensure we have a snapshot when updating various system catalogs.

  12. Use specific collation where needed in new test

  13. Expand virtual generated columns in the planner

  14. Virtual generated columns

  15. Define PG_LOGICAL_DIR for path pg_logical/ in data folder

  16. Revert support for ALTER TABLE ... MERGE/SPLIT PARTITION(S) commands

  17. Avoid repeated table name lookups in createPartitionTable()

  18. Provide deterministic order for catalog queries in partition_split.sql

  19. Don't copy extended statistics during MERGE/SPLIT partition operations

  20. Fix the name collision detection in MERGE/SPLIT partition operations

  21. Fix regression tests conflict in 3ca43dbbb6

  22. Add permission check for MERGE/SPLIT partition operations

  23. Fix one more portability shortcoming in new test_pg_dump test.

  24. Inherit parent's AM for partition MERGE/SPLIT operations

  25. Add tab completion for partition MERGE/SPLIT operations

  26. Rename tables in tests of partition MERGE/SPLIT operations

  27. Make new partitions with parent's persistence during MERGE/SPLIT

  28. Document the way partition MERGE/SPLIT operations create new partitions

  29. Change the way ATExecMergePartitions() handles the name collision

  30. Grammar fixes for split/merge partitions code

  31. Checks for ALTER TABLE ... SPLIT/MERGE PARTITIONS ... commands

  32. Fix some grammer errors from error messages and codes comments

  33. Support TZ and OF format codes in to_timestamp().

  34. Support identity columns in partitioned tables

  35. Fix indentation in twophase.c

  36. Fix corner-case planner failure for MERGE.

  37. Doc: fix documentation example for bytea hex output format.

  38. Avoid repeated name lookups during table and index DDL.