Re: Declarative partitioning

From: Simon Riggs <simon(at)2ndQuadrant(dot)com>
To: Josh Berkus <josh(at)agliodbs(dot)com>
Cc: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Declarative partitioning
Date: 2015-08-19 11:59:44
Message-ID: CANP8+jLDBxfndrXpwuoqsB8iQN1tJu14shd68+v-KnBnnpGLXw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 18 August 2015 at 18:31, Josh Berkus <josh(at)agliodbs(dot)com> wrote:

> > 2. Creating a partition of a partitioned table
> >
> > CREATE TABLE table_name
> > PARTITION OF partitioned_table_name
> > FOR VALUES values_spec;
> >
> > Where values_spec is:
> >
> > listvalues: [IN] (val1, ...)
> >
> > rangevalues: START (col1min, ... ) END (col1max, ... )
> > | START (col1min, ... )
> > | END (col1max, ... )
>
> So, one thing I missed in here is anything about automated partitioning
> of tables; that is, creating new partitions based on incoming data or a
> simple statement which doesn't require knowledge of the partitioning
> scheme. It's possible (and entirely accceptable) that you're
> considering automated partition creation outside of the scope of this
> patch.

I would like to make automatic partitioning outside the scope of this first
patch.

However, for range partitions, it would be *really* useful to
> have this syntax:
>
> CREATE NEXT PARTITION ON parent_table;
>
> Which would just create the "next" partition based on whatever the range
> partitoning scheme is, instead of requiring the user to calculate start
> and end values which might or might not match the parent partitioning
> scheme, and might leave gaps. Also this would be useful for range
> partitions:
>
> CREATE PARTITION ON parent_table USING ( start_value );
>
> ... where start_value is the start range of the new partition. Again,
> easier for users to get correct.
>
> Both of these require the idea of regular intervals for range
> partitions, that is, on a table partitioned by month on a timestamptz
> column, each partition will have the range [ month:1, nextmonth:1 ).
> This is the most common use-case for range partitions (like, 95% of all
> partitioning cases I've seen), so a new partitioning scheme ought to
> address it.
>
> While there are certainly users who desire the ability to define
> arbitrary ranges for each range partition, these are by far the minority
> and could be accomodated by a different path with more complex syntax.
> Further, I'd wager that most users who want to define arbitrary ranges
> for range partitions aren't going to be satisfied with the other
> restrictions on declarative partitioning (e.g. same constraints, columns
> for all partitions) and are going to use inheritance partitioning anyway.

I like the idea of a regular partitioning step because it is how you design
such tables - "lets use monthly partitions".

This gives sanely terse syntax, rather than specifying pages and pages of
exact values in DDL....

PARTITION BY RANGE ON (columns) INCREMENT BY (INTERVAL '1 month' ) START
WITH value;

borrowing the same concepts from sequence syntax.

> Creating index on parent is not allowed. They should be defined on (leaf)

> > partitions. Because of this limitation, primary keys are not allowed on a
> > partitioned table. Perhaps, we should be able to just create a dummy
> > entry somewhere to represent an index on parent (which every partition
> > then copies.)
>
> This would be preferable, yes. Making users remember to manually create
> indexes on each partition is undesirable.

I think it is useful to allow additional indexes on partitions, if desired,
but we should always automatically build the indexes that are defined on
the master when we create a new partition.

Presumably unique indexes will be allowed on partitions. So if the
partition key is unique, we can say the whole partitioned table is unique
and call that a Primary Key.

I would want individual partitions to be placed on separate tablespaces,
but not by default.

--
Simon Riggs http://www.2ndQuadrant.com/
<http://www.2ndquadrant.com/>
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Simon Riggs 2015-08-19 12:23:43 Re: Declarative partitioning
Previous Message Kohei KaiGai 2015-08-19 11:55:40 Re: DBT-3 with SF=20 got failed