Re: Add SPLIT PARTITION/MERGE PARTITIONS commands
Dmitry Koval <d.koval@postgrespro.ru>
From: Dmitry Koval <d.koval@postgrespro.ru>
To: Junwang Zhao <zhjwpku@gmail.com>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2025-06-11T13:10:00Z
Lists: pgsql-hackers
Hi, Junwang Zhao! Thank you for note. 1. >Would it be better to use RELATION_IS_OTHER_TEMP in this case? >I noticed that while other parts of tablecmds.c don’t use the macro, >all other files consistently use RELATION_IS_OTHER_TEMP. Agreed, RELATION_IS_OTHER_TEMP is better. Changed. The fix will be in the next patch. 2. >+/* >+* We intended to create the partition with the same persistence as the >+* parent table, but we still need to recheck because that might be >+* affected by the search_path. If the parent is permanent, so must be >+* all of its partitions. >+*/ >I have trouble understanding how this is possible, can you kindly >give me some guidance on this logic? Perhaps this is best explained with an example. (see src/test/regress/sql/partition_merge.sql). (a) Create permanent table "t": SET search_path = partitions_merge_schema, pg_temp, public; CREATE TABLE t (i int) PARTITION BY RANGE (i); CREATE TABLE tp_0_1 PARTITION OF t FOR VALUES FROM (0) TO (1); CREATE TABLE tp_1_2 PARTITION OF t FOR VALUES FROM (1) TO (2); (b) Attempt to merge persistent partitions tp_0_1, tp_1_2 into temporary partition tp_0_2: SET search_path = pg_temp, partitions_merge_schema, public; -- Can't merge persistent partitions into a temporary partition ALTER TABLE t MERGE PARTITIONS (tp_0_1, tp_1_2) INTO tp_0_2; (c) "ALTER TABLE ... MERGE PARTITIONS ..." will return an error: ERROR: cannot create a temporary relation as partition of permanent relation "t" -- With best regards, Dmitry Koval Postgres Professional: http://postgrespro.com