| 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: | [email protected] |
| Views: | Whole Thread | Raw Message | 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() |