Re: Proposal of Table Partition

From: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>
To: My Life <life(dot)show(at)qq(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, tgl <tgl(at)sss(dot)pgh(dot)pa(dot)us>, bruce <bruce(at)momjian(dot)us>, robertmhaas <robertmhaas(at)gmail(dot)com>
Subject: Re: Proposal of Table Partition
Date: 2015-08-31 06:13:21
Message-ID: CAFjFpRdWoBYg26aVRcXQ-xEDeCY7FY34zTvq4ygnKe9gKw4AwQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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.5010800@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(dot)show(at)qq(dot)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

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Langote 2015-08-31 06:45:38 Re: Proposal of Table Partition
Previous Message dinesh kumar 2015-08-31 05:22:41 Re: [PATCH] SQL function to report log message