Re: Add SPLIT PARTITION/MERGE PARTITIONS commands

From: Dmitry Koval <d(dot)koval(at)postgrespro(dot)ru>
To: jian he <jian(dot)universality(at)gmail(dot)com>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Add SPLIT PARTITION/MERGE PARTITIONS commands
Date: 2025-06-11 00:06:27
Message-ID: 1e74c9fd-830e-4544-b0de-e49ea4b04029@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi!

This email contains comments to three emails
(2 x 06.06.2025 + 1 x 10.06.2025).

1.
>I am surprised that partition_merge.sql doesn't have much \d+ command.
>so I added two, which is necessary IMHO.

I think that a lot of \d+ commands can make the out-files difficult to
read. But I agree, that test for triggers is useful. Test for triggers
added to test of partition properties.

2.
>Here, StoreConstraints last argument should be set to true?
>see also StoreAttrDefault.

Thanks, this is correct.

>you can use TupleDescGetDefault, build_generation_expression
>to simplify the above code.

Should we use ATTRIBUTE_GENERATED_VIRTUAL [1] and
build_generation_expression [2] here? Function expandTableLikeClause
("CREATE TABLE ... LIKE ..." clause) does not use GENERATED VIRTUAL
yet ...

>Do getAttributesList need to care about pg_attribute.attidentity?
>currently MERGE PARTITION seems to work fine with identity columns,
>this issue i didn't dig deeper.

Probably after commit [3] partition's identity columns shares the
identity space (i.e. underlying sequence) as the corresponding
columns of the partitioned table. So call BuildDescForRelation in
createPartitionTable function should copy pg_attribute.attidentity
for new partition.

>I am wondering right after createPartitionTable,
>do we need a CommandCounterIncrement?
>because later moveMergedTablesRows will use the output of
>createPartitionTable.

We call CommandCounterIncrement in createPartitionTable function right
after heap_create_with_catalog (same code in create_toast_table,
make_new_heap, DefineRelation functions). We need an additional
CommandCounterIncrement call in case we use objects created after this
point. But we probably don't use these objects (in function
moveMergedTablesRows too).

3.
>I only want to allow HEAP_TABLE_AM_OID to be used
>in the merge partition,
>I guess that would avoid unintended consequences.

Thanks for the clarification. Isn't this limitation too strong?
It is very likely that the user will create an AM based on
HEAP_TABLE_AM_OID, in which case the code should work.

>RangeVarGetAndCheckCreationNamespace
>was called first on ATExecMergePartitions, then on
>createPartitionTable. Maybe we can pass the first
>ATExecMergePartitions call result to createPartitionTable to avoid
>calling it twice.

Unfortunately, this is not the case for SPLIT PARTITION. I will think
about it, but I am concerned that the createPartitionTable function
will be passed two related arguments - newPartName and namespaceId
(result of RangeVarGetAndCheckCreationNamespace).

Thanks for
v42-0001-fix-MERGE-PARTITION-with-partitioned-table-not-enforc.no-cfbot!
I forgot about not valid or not enforced constraints.

>cosmetic changes:
>many of the "forach" can change to "foreach_node".
>for example in ATExecMergePartitions.
>we can change
>``foreach(listptr, cmd->partlist)``
>to
>``foreach_node(RangeVar, name, cmd->partlist)`

Changed.

Links.
------
[1] Virtual generated columns,
https://github.com/postgres/postgres/commit/83ea6c54025bea67bcd4949a6d58d3fc11c3e21b
[2] Expand virtual generated columns in the planner,
https://github.com/postgres/postgres/commit/1e4351af329f2949c679a215f63c51d663ecd715
[3] Support identity columns in partitioned tables,
https://github.com/postgres/postgres/commit/699586315704a8268808e3bdba4cb5924a038c49

P.S. 2Junwang Zhao: sorry, I'll write an answer a little later.

--
With best regards,
Dmitry Koval

Postgres Professional: http://postgrespro.com

Attachment Content-Type Size
v43-0001-Implement-ALTER-TABLE-.-MERGE-PARTITIONS-.-comma.patch text/plain 158.4 KB
v43-0002-Implement-ALTER-TABLE-.-SPLIT-PARTITION-.-comman.patch text/plain 221.1 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2025-06-11 00:28:13 Re: Partitioned tables and [un]loggedness
Previous Message Michael Paquier 2025-06-10 23:56:54 Re: Safeguards against incorrect fd flags for fsync()