There is already a recent proposal on hackers about partition support in
PostgreSQL by Amit Langote. You will find the thread at
http://www.postgresql.org/message-id/55d3093c.5010...@lab.ntt.co.jp. May be
you can collaborate with the ongoing work.

On Sun, Aug 30, 2015 at 4:28 PM, My Life <life.s...@qq.com> wrote:

> Hi, everyone! I'd like to propose a postgres partition implementation.
> First, I would show the design to everyone, and talk about it. If we think
> the design is not very bad, and can be commit to the PostgreSQL baseline,
> then I will post the code to the community.
> (note: my english is not very good.)
>
> Table Partition Design
> =====================
> In this design, partitions are normal tables in inheritance hierarchies,
> with the same table structure with the partitioned table.
>
> In pg_class we have an additional relpartition field which has following
> values:
> 's'        /* single regular table */
> 'r'        /* partitioned table by range */
> 'l'        /* partitioned table by list */
> 'h'        /* partitioned table by hash */
> 'c'        /* child partition table */
>
> Add a new system schema named 'pg_partition', just like 'pg_toast', we can
> create the partition catalog table to store the partition entries. let's
> assume the partition catalog's name is pg_partition_2586 (2586 is the
> partitioned table's OID in pg_class).
> a range or interval partition catalog's structure is as follows:
> column            data type            comment
> partname        name                a partition's name, this is the
> primary key
> partid            oid                    a partition's OID in pg_class
> interval        text                a interval partition's interval(maybe
> a expression)
> partkey1        depends on partitioned table
> ...
> partkeyN        depends on partitioned table
> partkey1, ..., partkeyN is a partition's upper bound.
> Finally, make a unique constraint on partkey1, ..., partkeyN.
> Every time we create a new partition, we insert a new tuple into this
> partition catalog.
> Every time we drop an old partition, we delete the related tuple in this
> partition catalog.
>
> For a partitioned table's CREATE action, we should transform the action
> into the CREATE action of partitioned table and partitions, and the INSERT
> action into the partition catalog.
>
> For INSERT action, we implement a RelationGetTuplePartid method, which can
> find the partition the tuple belongs to. It will do an index scan on the
> partition catalog table(assume it is pg_partition_2586) to find the
> partition.
> and a ExecGetPartitionResultRel method, which can return the partition's
> ResultRelInfo to execute INSERT action.
>
> For partitioned table's scan action, and JOIN action, we implemented a
> plan node named 'PartitionExpand'. the plan node can expand the partitioned
> table scan node into a list of partitions according to the filter and
> conditions. and it can expand partitioned table JOIN node into a list of
> partitions JOIN node wisely.
>
> For pg_dump backup action, we should dump the partition catalog, and
> relpartition field in pg_class.
>
> so these are the main points of the design, and I can show any detail you
> wondered later.
>



-- 
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company

Reply via email to