On Thu, Jan 10, 2019 at 6:10 PM, Imai, Yoshikazu wrote:
> > Does that not mean that the if (parent->top_parent_relids) will always
> > be false in build_dummy_partition_rel() and it'll only ever get
> > rtekind == RTE_RELATION?
>
> At least, I checked if (parent->top_parent_relids) can be true if I
> execute below SQL.
>
> select * from parent p1 inner join parent p2 on p1.a=p2.a where p1.id < 15;
Sorry, I also made mistake. I was executed:
select * from parent p1 inner join parent p2 on p1.a=p2.a where p1.a < 15;
--
Yoshikazu Imai
> -----Original Message-----
> From: Imai, Yoshikazu [mailto:imai.yoshikazu@jp.fujitsu.com]
> Sent: Friday, January 11, 2019 3:10 PM
> To: 'David Rowley' <david.rowley@2ndquadrant.com>; Amit Langote
> <Langote_Amit_f8@lab.ntt.co.jp>
> Cc: Amit Langote <amitlangote09@gmail.com>; Alvaro Herrera
> <alvherre@2ndquadrant.com>; Pg Hackers <pgsql-hackers@postgresql.org>
> Subject: RE: speeding up planning with partitions
>
> Hi David,
>
> On Thu, Jan 10, 2019 at 4:02 PM, David Rowley wrote:
> > 3. I wonder if there's a better way to handle what
> > build_dummy_partition_rel() does. I see the child's relid to the
> > parent's relid and makes up a fake AppendRelInfo and puts it in the
> > parent's slot. What's going to happen when the parent is not the
> > top-level parent? It'll already have a AppendRelInfo set.
> ...
> >
> > select * from parent p1 inner join parent p2 on p1.a=p2.a where p1.id
> > < 10;
>
> I think there is a mistake in the select SQL.
> "p1.id < 10" doesn't prune any partition because tables are partitioned
> by column "a" in your definition. Isn't it?
>
> > Does that not mean that the if (parent->top_parent_relids) will always
> > be false in build_dummy_partition_rel() and it'll only ever get
> > rtekind == RTE_RELATION?
>
> At least, I checked if (parent->top_parent_relids) can be true if I
> execute below SQL.
>
> select * from parent p1 inner join parent p2 on p1.a=p2.a where p1.id
> < 15;
>
> I couldn't check other points you mentioned, but I also think
> build_dummy_partition_rel() needs more consideration because I felt it
> has complicated logic when I was checking around here.
>
>
> Amit,
> I also realized there are some mistakes in the comments around this
> function.
>
> + * build_dummy_partition_rel
> + * Build a RelOptInfo and AppendRelInfo for a pruned
> partition
> s/and AppendRelInfo/and an AppendRelInfo/
>
> + * Now we'll need a (no-op) AppendRelInfo for parent, because
> we're
> + * setting the dummy partition's relid to be same as the parent's.
> s/a \(no-op\) AppendRelInfo/an \(no-op\) AppendRelInfo/
>
> --
> Yoshikazu Imai