Re: moving some partitioning code to executor

From: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
To: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: moving some partitioning code to executor
Date: 2017-09-26 04:42:26
Message-ID: 065e9b24-c9af-1e58-2643-028786393824@lab.ntt.co.jp
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-hackers

On 2017/09/14 16:13, Amit Langote wrote:
> Hi.
>
> It seems to me that some of the code in partition.c is better placed
> somewhere under the executor directory. There was even a suggestion
> recently [1] to introduce a execPartition.c to house some code around
> tuple-routing.
>
> IMO, catalog/partition.c should present an interface for handling
> operations on a *single* partitioned table and avoid pretending to support
> any operations on the whole partition tree. For example, the
> PartitionDispatch structure embeds some knowledge about the partition tree
> it's part of, which is useful when used for tuple-routing, because of the
> way it works now (lock and form ResultRelInfos of *all* leaf partitions
> before the first input row is processed).
>
> So, let's move that structure, along with the code that creates and
> manipulates the same, out of partition.c/h and to execPartition.c/h.
> Attached patch attempts to do that.
>
> While doing the same, I didn't move *all* of get_partition_for_tuple() out
> to execPartition.c, instead modified its signature as shown below:
>
> -extern int get_partition_for_tuple(PartitionDispatch *pd,
> - TupleTableSlot *slot,
> - EState *estate,
> - PartitionDispatchData **failed_at,
> - TupleTableSlot **failed_slot);
> +extern int get_partition_for_tuple(Relation relation, Datum *values,
> + bool *isnull);
>
> That way, we keep the core partition bound comparison logic inside
> partition.c and move rest of the stuff to its caller ExecFindPartition(),
> which includes navigating the enveloping PartitionDispatch's.
>
> Thoughts?
>
> PS: 0001 of the attached is the patch from [2] which is here to be applied
> on HEAD before applying the main patch (0002) itself

Since that 0001 patch was committed [1], here is the rebased patch. Will
add this to the November commit-fest.

Thanks,
Amit

[1] https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=77b6b5e9c

Attachment Content-Type Size
0001-Move-certain-partitioning-code-to-the-executor.patch text/plain 51.4 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Alvaro Hernandez 2017-09-26 05:42:53 Re: Built-in plugin for logical decoding output
Previous Message Abhinav Singh 2017-09-26 04:11:07 Logical Replication - test_decoding - unchanged-toast-datum