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 |
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() |