Re: Proposal for syntax to support creation of partition tables whencreating parent table - Mailing list pgsql-hackers

From Fabien COELHO
Subject Re: Proposal for syntax to support creation of partition tables whencreating parent table
Date
Msg-id alpine.DEB.2.21.1909251717450.31268@lancre
Whole thread Raw
In response to Proposal for syntax to support creation of partition tables whencreating parent table  (Muhammad Usama <m.usama@gmail.com>)
List pgsql-hackers
Hello Muhammad,

I think that it may be better to have a partition spec which describes not 
the list of partitions, but what is wanted, letting postgres to do some 
more work.

See this thread:

https://www.postgresql.org/message-id/alpine.DEB.2.21.1907150711080.22273@lancre

> I want to propose an extension to CREATE TABLE syntax to allow the creation
> of partition tables along with its parent table using a single statement.
>
> In this proposal, I am proposing to specify the list of partitioned tables
> after the PARTITION BY clause.
>
> CREATE TABLE table_name (..)
>   PARTITION BY { RANGE | LIST | HASH } (..)
> (
>   list of partitions
> )  ;

> Below are a few examples of the proposed syntax, in a nutshell, I am
> leveraging the syntax currently supported by Postgres for creating
> partitioned tables. The purpose of this proposal is to combine the creation
> of the parent partition table and its partitions in one SQL statement.
>
> CREATE TABLE Sales (salesman_id INT, salesman_name TEXT, sales_region TEXT,
> hiring_date DATE, sales_amount INT )
>    PARTITION BY RANGE (hiring_date)
>    (
>    PARTITION part_one FOR VALUES FROM ('2008-02-01') TO ('2008-03-01'),
>    PARTITION part_two FOR VALUES FROM ('2009-02-01') TO ('2009-03-01'),
>    PARTITION part_def DEFAULT
>    );
>
> CREATE TABLE Sales2 (salesman_id INT, salesman_name TEXT, sales_region
> TEXT, hiring_date DATE, sales_amount INT )
>    PARTITION BY HASH (salesman_id)
>    (
>    PARTITION par_one FOR VALUES WITH (MODULUS 2, REMAINDER 0),
>    PARTITION par_two FOR VALUES WITH (MODULUS 2, REMAINDER 1)
>    );
>
> CREATE TABLE Sales3(salesman_id INT, salesman_name TEXT, sales_region TEXT,
> hiring_date DATE, sales_amount INT)
>    PARTITION BY LIST (sales_region)
>    (
>     PARTITION pt_one FOR VALUES IN ('JAPAN','CHINA'),
>     PARTITION pt_two FOR VALUES IN ('USA','CANADA'),
>     PARTITION pt_def DEFAULT
>    );
>
> -- Similarly for specifying subpartitions of partitioned tables
>
> CREATE TABLE All_Sales ( year INT, month INT, day INT, info TEXT)
>    PARTITION BY RANGE(year)(
>            PARTITION sale_2019_2020 FOR VALUES FROM (2019) TO (2021)
>            PARTITION BY LIST(month)
>            (
>             PARTITION sale_2019_2020_1 FOR VALUES IN (1,2,3,4)
>             PARTITION BY RANGE(day)(
>                 PARTITION sale_2019_2020_1_1 FOR VALUES FROM (1) TO (10)
>                 PARTITION BY HASH(info)
>                 (
>                  PARTITION sale_2019_2020_1_1_1 FOR VALUES WITH (MODULUS
> 2,REMAINDER 0),
>                  PARTITION sale_2019_2020_1_1_2 FOR VALUES WITH (MODULUS
> 2,REMAINDER 1)
>                 ),
>                 PARTITION sale_2019_2020_1_2 FOR VALUES FROM (10) TO (20),
>                 PARTITION sale_2019_2020_1_3 FOR VALUES FROM (20) TO (32)),
>             PARTITION sale_2019_2020_2 FOR VALUES IN (5,6,7,8),
>             PARTITION sale_2019_2020_3 FOR VALUES IN (9,10,11,12)
>            ),
>            PARTITION sale_2021_2022 FOR VALUES FROM (2021) TO (2023),
>            PARTITION sale_2023_2024 FOR VALUES FROM (2023) TO (2025),
>            PARTITION sale_default default
>            );
>
> This new syntax requires minimal changes in the code. I along with my
> colleague Movead.li have drafted a rough POC patch attached to this email.
>
> Please note that the patch is just to showcase the new syntax and get a
> consensus on the overall design and approach.
>
> As far as I know, there are already few ongoing discussions related to the
> partition syntax enhancements, but the proposed syntax will not interfere
> with these ongoing proposals. Here is a link to one such discussion:
> https://www.postgresql.org/message-id/alpine.DEB.2.21.1907150711080.22273%40lancre
>
> Please feel free to share your thoughts.
>
> Best Regards
>
> ...
> Muhammad Usama
> Highgo Software Canada
> URL : http://www.highgo.ca
> ADDR: 10318 WHALLEY BLVD, Surrey, BC
>

-- 
Fabien Coelho - CRI, MINES ParisTech



pgsql-hackers by date:

Previous
From: Anastasia Lubennikova
Date:
Subject: Re: [HACKERS] [WIP] Effective storage of duplicates in B-tree index.
Next
From: Tom Lane
Date:
Subject: Re: Proposal for syntax to support creation of partition tables when creating parent table