Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dL3gd-0001an-8Y for pgadmin-hackers@arkaria.postgresql.org; Wed, 14 Jun 2017 08:29:59 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dL3gc-0008Ve-2f for pgadmin-hackers@arkaria.postgresql.org; Wed, 14 Jun 2017 08:29:58 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dL3gM-00086k-Cu for pgadmin-hackers@postgresql.org; Wed, 14 Jun 2017 08:29:42 +0000 Received: from mail-io0-x234.google.com ([2607:f8b0:4001:c06::234]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1dL3gD-0000dh-Io for pgadmin-hackers@postgresql.org; Wed, 14 Jun 2017 08:29:41 +0000 Received: by mail-io0-x234.google.com with SMTP id y77so88332263ioe.3 for ; Wed, 14 Jun 2017 01:29:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pgadmin-org.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Y4+65rGPuJkll9CeAl4f3JTCi3AvNldJItTiHGLB/4o=; b=rG8Pf/SBLSiOeBL6jeMfu6idpQpQqwOtjOSj/oYpDP3YELOJfqJgpTzQZNJqkJ9NMD uLze509yP1vryrADTL9qlu0uztf7BLXgx4p2LLcK5QQx5ps98WcBEKrWQZ3wHlc6lpGo 9xLpiV5mHhrJNt2vMPnN8n4ShFlujXpEKR1lrlm1Eo6rg2jn+Zg4E659qU4SHC3ytEjV Mty4pEqkT187FuC4AZUwE131bwAt1ct1AH6q6Bm3BYwCh+mqF9beYWxKsjnghQSHzSf8 eMYnMTPo4jgUT/nv+KDJVVtoFQQBMYx6qVr2P5OX49jz0AFOgrBF1qpPf5Zfi25I4T5i R9CQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Y4+65rGPuJkll9CeAl4f3JTCi3AvNldJItTiHGLB/4o=; b=lpqolpUREiXcL9EwQtBPRnLIO1ZYRTQN6xUrA5xGx3K9/zlPBD6ULAJUW4S8wG7SoN ibg63wTnE4S9fC8lKzsqwvwaQJ4bK3G9CYqddqcyZVDcCTEJU4mmvTaA/TqSdk6NANoZ y7noC5f9QiRovwp0hUtzYfKYY8gvpxZMEkNFaJ+WilMBthRMuJk5sFXBEm30nKEcQi+d ZGePuqP0T7j/K7lkgm1HIKPO4LJSzJduVHUETfcHe9GqVU6wJyzhHyqXZ+AM2RV/jpcy sf1jtffIPNS8pp/1hs6FSVJRXIGdtAH6zVYbnpW6g5dS5OOucHzd4hR9OFlkabAn+peK tA6g== X-Gm-Message-State: AKS2vOwuv5hIuQwlB9vV2/SpElzqKaccD3YitAzabTFnwEQv8F9XdqPX L1RsoOjxyEEnKo/r1cOS6DYgkEpimPAv X-Received: by 10.107.53.143 with SMTP id k15mr456024ioo.144.1497428971419; Wed, 14 Jun 2017 01:29:31 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.174.147 with HTTP; Wed, 14 Jun 2017 01:29:30 -0700 (PDT) In-Reply-To: References: From: Dave Page Date: Wed, 14 Jun 2017 09:29:30 +0100 Message-ID: Subject: Re: Declarative partitioning in pgAdmin4 To: Akshay Joshi Cc: pgadmin-hackers , Shirley Wang , Robert Eckhardt Content-Type: multipart/alternative; boundary="001a11449b42eb01a00551e75993" List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a11449b42eb01a00551e75993 Content-Type: text/plain; charset="UTF-8" On Tue, Jun 13, 2017 at 2:59 PM, Akshay Joshi wrote: > Hi All > > For further implementation following task needs to be work upon: > > - How to parse and show partitions keys. For example user has created > below partitioned table > > CREATE TABLE public.sales > ( > country character varying COLLATE pg_catalog."default" NOT NULL, > sales bigint, > saledate date > ) PARTITION BY RANGE (*country, date_part('year'::text, sale date)*) > > When user open the properties dialog I am not able to figure out how to > parse keys(displayed in bold in above example) and show them in our control > that we used. For the time being I have hide that control in 'Edit' mode > (Refer Attach Partition.png) > > I assume psql with display that info with \dt or similar? What does it do? Failing that, look at pg_dump? > > - *Support of sub partitioning*: To implement sub-partitioning, > specify the PARTITION BY clause in the commands used to create individual > partitions, for example: > - > > CREATE TABLE measurement_y2006 PARTITION OF measurement > FOR VALUES FROM ('2006-02-01') TO ('2006-03-01') > PARTITION BY RANGE (peaktemp); > > > To achieve above I have made some changes in GUI (Refer Sub > Partition.png). > *Complex and challenging part here is "measurement_y2006" is > partition of "measurement" and parent table for other partitions too which > user can create later. How we will going to show this in browser tree? * > One option could be > Tables > ->measurement(table) > ->Partitions > ->measurement_y2006(Partition of measurement and parent > of p1) > ->Partitions > ->p1 > Urgh. But yeah. I think that makes logical sense. > > - *Attach Partitions*: To implement attach N partitions I have made > some changes in GUI( Refer Attach Partition.png). Attach Partitions > control will only be visible in "Edit" mode. > > I have only modified the UI changes, there are lots of work needs to be > done to complete that. > I don't think I'd include Attach on the dialog. I think it should be a separate menu option, with a simple dialogue to let the user choose the table to attach. The reason for that is that Attach is an action not a property. On the Properties panels we expect any changes we make to be the same the next time the dialogue is opened - e.g. if you toggle "Enable Trigger" to disabled and hit OK, then next time you open the dialogue you see the switch in the same position. With Attach, that's not the case - you'll list one or more tables to attach, hit OK, and when you next open the Properties dialogue, those partitions will be listed in the partition list, not the Attach list. > Please review the design. Suggestions/Comments are welcome. > > > On Tue, Jun 6, 2017 at 4:30 PM, Robert Eckhardt > wrote: > >> >> >> On Tue, Jun 6, 2017 at 4:32 AM, Dave Page wrote: >> >>> >>> For roll up this pattern seems obvious, identify the n partitions you >>>> need/want to combine and then run a job to combine them. >>>> >>> >>> You're thinking Greenplum :-). There is no roll up in PostgreSQL, unless >>> you're thinking we should create such a feature in pgAdmin. >>> >>> Of course, I have no objection to extending what we do in PG to add GP >>> feature support, but let's start with PG. >>> >> >> No not at all. That was a very specific and consistent pattern described >> by users leveraging time based range partitions in Postgres. I'm not sure >> if that same use case will be supported with partitioning as implemented in >> Postgres 10 but it is a Postgres pattern. >> >> -- Rob >> >> >>> >>> >>>> >>>> For other patterns such as creating indexes and such it requires a bit >>>> more thought. Generally users described wanting to treat all of the >>>> children like a single table (just like Oracle), however, other users >>>> described potentially modifying chunks of partitions differently depending >>>> on some criterion. This means that users will need to identify the subset >>>> they want to optimize and then ideally be able to act on them all at once. >>>> >>> >>> Right. >>> >>> >>>> >>>> -- Rob >>>> >>>> >>>> >>>> >>>> >>>> >>>>> >>>>> So... it sounds like we're on the right lines :-) >>>>> >>>>> >>>>>> >>>>>> For the former, this can be addressed by enabling users to modify one >>>>>> or more child partitions at the same time. For the latter, that is a >>>>>> workflow that might be addressed outside of the create table with partition >>>>>> workflow we're working on currently. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Mon, Jun 5, 2017 at 5:21 AM Dave Page wrote: >>>>>> >>>>>>> On Fri, Jun 2, 2017 at 9:01 AM, Akshay Joshi < >>>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Hi All >>>>>>>> >>>>>>>> Following are the further implementation updates to support >>>>>>>> Declarative Partitioning: >>>>>>>> >>>>>>>> - Show all the existing partitions of the parent table in >>>>>>>> Partitions tab (Refer Existing_Partitions.png) >>>>>>>> - Ability to create N partitions and detach existing >>>>>>>> partitions. Refer (Create_Detach_Partition.png), in this >>>>>>>> example I have detach two existing partition and create two new partitions. >>>>>>>> - Added "Detach Partition" menu to partitions node only and >>>>>>>> user will be able to detach from there as well. Refer (Detach. >>>>>>>> png) >>>>>>>> >>>>>>>> That's looking good to me :-) >>>>>>> >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Wed, May 24, 2017 at 8:00 PM, Robert Eckhardt < >>>>>>>> reckhardt@pivotal.io> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, May 24, 2017 at 3:35 AM, Akshay Joshi < >>>>>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Taking average of two columns is just an >>>>>>>>>> example/representation of expression, there is no use case of that. As I am >>>>>>>>>> also in learning phase. Below are some use case that I can think of: >>>>>>>>>> >>>>>>>>>> - >>>>>>>>>> >>>>>>>>>> Partitions based on first letter of their username >>>>>>>>>> >>>>>>>>>> CREATE TABLE users ( >>>>>>>>>> id serial not null, >>>>>>>>>> username text not null, >>>>>>>>>> password text, >>>>>>>>>> created_on timestamptz not null, >>>>>>>>>> last_logged_on timestamptz not null >>>>>>>>>> )PARTITION BY RANGE ( lower( left( username, 1 ) ) ); >>>>>>>>>> CREATE TABLE users_0 >>>>>>>>>> partition of users (id, primary key (id), unique (username)) >>>>>>>>>> for values from ('a') to ('g'); >>>>>>>>>> CREATE TABLE users_1 >>>>>>>>>> partition of users (id, primary key (id), unique (username)) >>>>>>>>>> for values from ('g') to (unbounded); >>>>>>>>>> >>>>>>>>>> - Partition based on country's sale for each month of an >>>>>>>>>> year. >>>>>>>>>> >>>>>>>>>> CREATE TABLE public.sales >>>>>>>>>> >>>>>>>>>> ( >>>>>>>>>> >>>>>>>>>> country text NOT NULL, >>>>>>>>>> >>>>>>>>>> sales bigint NOT NULL, >>>>>>>>>> >>>>>>>>>> saledate date >>>>>>>>>> >>>>>>>>>> ) PARTITION BY RANGE (country, (extract (YEAR FROM saledate)), >>>>>>>>>> (extract(MONTH FROM saledate))) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> CREATE TABLE public.sale_usa_2017_jan PARTITION OF sales >>>>>>>>>> >>>>>>>>>> FOR VALUES FROM ('usa', 2017, 01) TO ('usa', 2017, 02); >>>>>>>>>> >>>>>>>>>> CREATE TABLE public.sale_india_2017_jan PARTITION OF sales >>>>>>>>>> >>>>>>>>>> FOR VALUES FROM ('india', 2017, 01) TO ('india', 2017, 02); >>>>>>>>>> >>>>>>>>>> CREATE TABLE public.sale_uk_2017_jan PARTITION OF sales >>>>>>>>>> >>>>>>>>>> FOR VALUES FROM ('uk', 2017, 01) TO ('uk', 2017, 02); >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> INSERT INTO sales VALUES ('india', 10000, '2017-1-15'); >>>>>>>>>> >>>>>>>>>> INSERT INTO sales VALUES ('uk', 20000, '2017-1-08'); >>>>>>>>>> >>>>>>>>>> INSERT INTO sales VALUES ('usa', 30000, '2017-1-10'); >>>>>>>>>> >>>>>>>>>> Apart from above there may be N number of use cases that >>>>>>>>>> depends on specific requirement of user. >>>>>>>>>> >>>>>>>>> >>>>>>>>> Thank you for the example, you are absolutely correct and we were >>>>>>>>> confused. >>>>>>>>> >>>>>>>>> Given our new found understanding do you mind if we iterate a bit >>>>>>>>> on the UI/UX? What we were suggesting with the daily/monthly/yearly drop >>>>>>>>> down was a specific example of an expression. Given that fact that doesn't >>>>>>>>> seem to be required in an MVP, however, I do think a more interactive >>>>>>>>> experience between the definition of the child partitions and the creation >>>>>>>>> of the partitions would be optimal. >>>>>>>>> >>>>>>>>> I'm not sure where you are with respect to implementing the UI but >>>>>>>>> I'd love to float some ideas and mock ups past you. >>>>>>>>> >>>>>>>>> -- Rob >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> *Akshay Joshi* >>>>>>>> *Principal Software Engineer * >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>>>>> 976-788-8246 <+91%2097678%2088246>* >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Sent via pgadmin-hackers mailing list ( >>>>>>>> pgadmin-hackers@postgresql.org) >>>>>>>> To make changes to your subscription: >>>>>>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Dave Page >>>>>>> >>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>> Twitter: @pgsnake >>>>>>> >>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>> The Enterprise PostgreSQL Company >>>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Dave Page >>>>> Blog: http://pgsnake.blogspot.com >>>>> Twitter: @pgsnake >>>>> >>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>> The Enterprise PostgreSQL Company >>>>> >>>> >>>> >>> >>> >>> -- >>> Dave Page >>> Blog: http://pgsnake.blogspot.com >>> Twitter: @pgsnake >>> >>> EnterpriseDB UK: http://www.enterprisedb.com >>> The Enterprise PostgreSQL Company >>> >> >> > > > -- > *Akshay Joshi* > *Principal Software Engineer * > > > > *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 976-788-8246 > <+91%2097678%2088246>* > -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EnterpriseDB UK: http://www.enterprisedb.com The Enterprise PostgreSQL Company --001a11449b42eb01a00551e75993 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Tue, Jun 13, 2017 at 2:59 PM, Akshay Joshi <akshay.josh= i@enterprisedb.com> wrote:
=
Hi All=C2=A0

For further implementation= following task needs to be work upon:
  • How to parse and s= how partitions keys. For example user has created below partitioned table= =C2=A0
CREATE TABLE public.sales
(
=C2= =A0 =C2=A0 country character varying COLLATE pg_catalog."default"= NOT NULL,
=C2=A0 =C2=A0 sales bigint,
=C2=A0 =C2=A0 saledate date
) PARTITION BY RANGE (cou= ntry, date_part('year'::text, sale date))

<= /blockquote>
When user open the properties dialog I am not able to figure out how to parse keys(displayed = in bold in above example) and show them in our control that we used. For th= e time being I have hide that control in 'Edit' mode (Refer Attach = Partition.png)

I assume psql with display that in= fo with \dt or similar? What does it do? Failing that, look at pg_dump?
=C2=A0
  • Support of sub partitioning:=C2=A0To implement sub-partitioning= , specify the PARTITION BY clause in the commands used to create individual= partitions, for example:
  • CREATE TABLE measurement_y2006 PART=
    ITION OF measurement
        FOR VALUES FROM ('2006-02-01') TO ('2006-03-01')
        PARTITION BY RANGE (peaktemp=
    );
  • =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0To achiev= e above I have made some changes in GUI (Refer Sub Partition.png).=C2=A0
    =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0Complex and challenging part here is "measu= rement_y2006" is partition of "measurement" and parent table= for other partitions too which user can create later. How we will going to= show this in browser tree?=C2=A0
    =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0One option could be
    =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0Tables
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0->measurement(table)
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0->Partitions
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0->measurement_y2006(Partition of measu= rement and parent of p1)=C2=A0
    =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0->Partitions
    =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0->p1=C2=A0=

    Urgh. But yeah. I think that m= akes logical sense.
    =C2=A0
    • Attach Partitions: To implement attach N= partitions I have made some changes in GUI( Refer=C2=A0Attach Partition.png). Attach Partitions con= trol will only be visible in "Edit" mode.
    I have on= ly modified the UI change= s, there are lots of work needs to be done to complete that. =C2=A0

    I don't think I'd includ= e Attach on the dialog. I think it should be a separate menu option, with a= simple dialogue to let the user choose the table to attach.

    =
    The reason for that is that Attach is an action not a property. = On the Properties panels we expect any changes we make to be the same the n= ext time the dialogue is opened - e.g. if you toggle "Enable Trigger&q= uot; to disabled and hit OK, then next time you open the dialogue you see t= he switch in the same position. With Attach, that's not the case - you&= #39;ll list one or more tables to attach, hit OK, and when you next open th= e Properties dialogue, those partitions will be listed in the partition lis= t, not the Attach list.
    =C2=A0
    Please review the design. Suggestions/Comments are = welcome.
    =C2=A0=C2=A0

    On Tue, Jun 6, 2017 at 4:30 PM, = Robert Eckhardt <reckhardt@pivotal.io> wrote:


    On Tue, Jun 6, 2017 at 4:32 AM, Dave Page <dpage@pgadmi= n.org> wrote:

    For roll up this pattern seems obvious, identify the n partitions y= ou need/want to combine and then run a job to combine them.=C2=A0

    You're thinking G= reenplum :-). There is no roll up in PostgreSQL, unless you're thinking= we should create such a feature in pgAdmin.

    Of co= urse, I have no objection to extending what we do in PG to add GP feature s= upport, but let's start with PG.

    No not at all. That was a very specific and consis= tent pattern described by users leveraging time based range partitions in P= ostgres. I'm not sure if that same use case will be supported with part= itioning as implemented in Postgres 10 but it is a Postgres pattern.=C2=A0<= /div>

    -- Rob
    =C2=A0
    <= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;pa= dding-left:1ex">
    =C2=A0

    For ot= her patterns such as creating indexes and such it requires a bit more thoug= ht. Generally users described wanting to treat all of the children like a s= ingle table (just like Oracle), however, other users described potentially = modifying chunks of partitions differently depending on some criterion. Thi= s means that users will need to identify the subset they want to optimize a= nd then ideally be able to act on them all at once.=C2=A0
    =

    Right.
    =C2=A0

    -- Rob
    =




    =C2=A0

    So... it sounds like we're on the = right lines :-)
    =C2=A0

    For the former, this can be = addressed by enabling users to modify one or more child partitions at the s= ame time. For the latter, that is a workflow that might be addressed outsid= e of the create table with partition workflow we're working on currentl= y.=C2=A0




    <= /div>

    On Mon, Jun 5, 2017 at 5:21 AM Dave Page <dpage@pgadmin.org> wrote:
    On Fri, Jun 2, 2017 at 9:01 AM, Akshay Joshi <akshay.jos= hi@enterprisedb.com> wrote:
    Hi All=C2=A0

    Following are the further implemen= tation updates to support Declarative Partitioning:
    • Show = all the existing partitions of the parent table in Partitions tab (Refer Ex= isting_Partitions.png)
    • Ability to create N partitions and detach existing partitions. Refer (Crea= te_Detach_Partition.png), in t= his example I have detach two existing partition and create two new partiti= ons.
    • Added "Detach Partition" menu to partitions node onl= y and user will be able to detach from there as well. Refer (Detach.png) =C2=A0=C2=A0
    That's looking good to me :-)

    =C2=A0
    <= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;pa= dding-left:1ex">


    On Wed, May 24, 20= 17 at 8:00 PM, Robert Eckhardt <reckhardt@pivotal.io> wro= te:

    On Wed= , May 24, 2017 at 3:35 AM, Akshay Joshi <akshay.joshi@enterpri= sedb.com> wrote:

    =C2=A0 =C2=A0Taking average of two columns is just an example/rep= resentation of expression, there is no use case of that. As I am also in le= arning phase. Below are some use case that I can think of:
      Partitions based on first letter of their use=
      rname
      CREATE TABLE users (
      id serial not null,
      =
      username= text not null,
      password text,
      cr= eated_on timestamptz not null,
      = last_logged_on timesta= mptz not null
      )PARTITION BY RANGE ( lower
      ( left( = username, 1 ) ) );
      CREATE TABLE users_0
      partition of users (id, primary key (id), unique (username))
      for values from ('a') to ('g');
      CREATE TABLE users_1
      partition of users (id, primary key (id)= , unique (username)<= /span>)
      for values = from ('g') to <= span style=3D"color:rgb(102,204,102)">(unbounded);
    • =C2=A0Partit= ion based on country's sale for each month of an year.
    <= /div>
    CREATE TABLE pu= blic.sales
    (
    =C2=A0 =C2=A0 country text NOT NULL,
    =
    <= div>=C2=A0 =C2=A0 sales bigint NOT NULL,
    =C2=A0 =C2= =A0 saledate date
    ) PARTITION BY RANGE (country, (ext= ract (YEAR FROM saledate)), (extract(MONTH FROM saledate= )))

    CREATE TABLE public.sale_usa_2017_jan PARTITION OF sales
    =
    =C2=A0 =C2=A0 FOR VAL= UES FROM ('usa', 2017, 01) TO ('usa', 2017, 02);
    C= REATE TABLE public.sale_india_2017_jan PARTITION = OF sales
    =C2=A0 =C2=A0 FOR VALUES FROM ('india', 2017, 01)= TO ('india', 2017, 02);
    CREATE TABLE public.sale_uk= _2017_jan PARTITION OF sales
    <= div class=3D"gmail_extra">
    =C2=A0 =C2=A0 FOR= VALUES FROM ('uk', 2017, 01) TO ('uk', 2017, 02);

    INSERT INTO sales VALUES ('india', 10000, '2017-= 1-15');
    INSERT INTO sales VALUES ('uk', 20000, '2= 017-1-08');
    INSERT INTO sales VALUES ('usa', 30000, &#= 39;2017-1-10');

    =C2=A0 =C2=A0Apart from above there may be N number of use cases that de= pends on specific requirement of user.=C2=A0

    Thank you for the example, you are absolutely correct a= nd we were confused.=C2=A0

    Given our new found und= erstanding do you mind if we iterate a bit on the UI/UX?=C2=A0 What we were= suggesting with the daily/monthly/yearly drop down was a specific example = of an expression. Given that fact that doesn't seem to be required in a= n MVP, however, I do think a more interactive experience between the defini= tion of the child partitions and the creation of the partitions would be op= timal.=C2=A0

    I'm not sure where you are with r= espect to implementing the UI but I'd love to float some ideas and mock= ups past you.=C2=A0

    -- Rob



    -= -
    Akshay Joshi=
    Principal Software Engineer=C2=A0


    <= b>Phone: +91 20-3058-9517
    Mobile: <= a href=3D"tel:+91%2097678%2088246" value=3D"+919767888246" target=3D"_blank= ">+91 976-788-8246


    --
    Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription:
    http://www.postgresql.org/mailpref/pgadmin-ha= ckers




    --
    Dave Page

    Blog: http://pgsnake.blogspot.com
    Twitter: @pgsnake

    EnterpriseDB UK: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company<= br>


    --
    Dave Page
    Blog: http://pgsnake.blogspot.com
    Twitter: @p= gsnake

    EnterpriseDB UK: http://www.enterprisedb.com
    The Enterprise PostgreSQL = Company



    --
    Dave Page
    Blog: http://pgsnake.blogspot.com
    Tw= itter: @pgsnake

    EnterpriseDB UK: http://www.enterprisedb.com
    The Enterprise Po= stgreSQL Company




    --
    Akshay= Joshi<= /div>
    Principal S= oftware Engineer=C2=A0
    =




    --
    Dave Page
    Blog: = http://pgsnake.bl= ogspot.com
    Twitter: @pgsnake

    EnterpriseDB UK: http://www.enterprisedb.com<= br>The Enterprise PostgreSQL Company
    --001a11449b42eb01a00551e75993--