2014-08-29 18:35 GMT+02:00 Tom Lane <t...@sss.pgh.pa.us>:

> Alvaro Herrera <alvhe...@2ndquadrant.com> writes:
> > [ partition sketch ]
>
> > In this design, partitions are first-class objects, not normal tables in
> > inheritance hierarchies.  There are no pg_inherits entries involved at
> all.
>
> Hm, actually I'd say they are *not* first class objects; the problem with
> the existing design is exactly that child tables *are* first class
> objects.  This is merely a terminology quibble though.
>

+1 .. only few partitions slowdown planning significantly from 1ms to 20ms,
what is a issue with very simple queries over PK


>
> > * relkind RELKIND_PARTITION 'p' indicates a partition within a
> partitioned
> >   relation (its parent).  These cannot be addressed directly in DML
> >   queries and only limited DDL support is provided.  They don't have
> >   their own pg_attribute entries either and therefore they are always
> >   identical in column definitions to the parent relation.
>
> Not sure that not storing the pg_attribute rows is a good thing; but
> that's something that won't be clear till you try to code it.
>
> > Each partition is assigned an Expression that receives a tuple and
> > returns boolean.  This expression returns true if a given tuple belongs
> > into it, false otherwise.
>
> -1, in fact minus a lot.  One of the core problems of the current approach
> is that the system, particularly the planner, hasn't got a lot of insight
> into exactly what the partitioning scheme is in a partitioned table built
> on inheritance.  If you allow the partitioning rule to be a black box then
> that doesn't get any better.  I want to see a design wherein the system
> understands *exactly* what the partitioning behavior is.  I'd start with
> supporting range-based partitioning explicitly, and maybe we could add
> other behaviors such as hashing later.
>
> In particular, there should never be any question at all that there is
> exactly one partition that a given row belongs to, not more, not less.
> You can't achieve that with a set of independent filter expressions;
> a meta-rule that says "exactly one of them should return true" is an
> untrustworthy band-aid.
>
> (This does not preclude us from mapping the tuple through the partitioning
> rule and finding that the corresponding partition doesn't currently exist.
> I think we could view the partitioning rule as a function from tuples to
> partition numbers, and then we look in pg_class to see if such a partition
> exists.)
>
> > Additionally, each partitioned relation may have a master expression.
> > This receives a tuple and returns an integer, which corresponds to the
> > number of the partition it belongs into.
>
> I guess this might be the same thing I'm arguing for, except that I say
> it is not optional but is *the* way you define the partitioning.  And
> I don't really want black-box expressions even in this formulation.
> If you're looking for arbitrary partitioning rules, you can keep on
> using inheritance.  The point of inventing partitioning, IMHO, is for
> the system to have a lot more understanding of the behavior than is
> possible now.
>
> As an example of the point I'm trying to make, the planner should be able
> to discard range-based partitions that are eliminated by a WHERE clause
> with something a great deal cheaper than the theorem prover it currently
> has to use for the purpose.  Black-box partitioning rules not only don't
> improve that situation, they actually make it worse.
>
> Other than that, this sketch seems reasonable ...
>
>                         regards, tom lane
>
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>

Reply via email to