On Thu, Jul 26, 2018 at 2:12 AM, Tom Lane <t...@sss.pgh.pa.us> wrote: > Robert Haas <robertmh...@gmail.com> writes: >> On Tue, Jul 24, 2018 at 7:51 AM, Etsuro Fujita >> <fujita.ets...@lab.ntt.co.jp> wrote: >>> I'm not sure that's a good idea, because I think we have a trade-off >>> relation; the more we make create_plan simple, the more we need to make >>> earlier states of the planner complicated. >>> >>> And it looks to me like the partitionwise join code is making earlier (and >>> later) stages of the planner too complicated, to make create_plan simple. > >> I think that create_plan is *supposed* to be simple. Its purpose is >> to prune away data that's only needed during planning and add things >> that can be computed at the last minute which are needed at execution >> time. Making it do anything else is, in my opinion, not good. > > I tend to agree with Robert on this. In particular, if you put anything > into create_plan or later that affects cost estimates, you're really doing > it wrong, because changing those estimates might've changed the plan > entirely. (As I recall, we have a couple of cheats like that now, > associated with dropping no-op projection and subquery scan nodes. > But let's not add more.)
+1 > > TBH, I think this entire discussion is proving what sheer folly it was > to allow partitions to have rowtypes not identical to their parent. > But I suppose we're stuck with that now. > Every table created has a different rowtype and when the partition's rowtype is different from that of the partitioned table, we add a ConvertRowtypeExpr node on top of the whole-row expression. 2153 if (appinfo->parent_reltype != appinfo->child_reltype) 2154 { 2155 ConvertRowtypeExpr *r = makeNode(ConvertRowtypeExpr); We may be able to set rowtype of a partition to be same as the rowtype of a partitioned table when a partition table is created using an ALTER TABLE syntax. But are you suggesting that we change the reltype of a partition being attached? What happens when we detach a partition and let the table live independent of the partitioned table? Do we create a new reltype? I am not even going into the problem when we try to attach a partition with different tuple layout. I do believe that such usecases arise and rewriting the table being attached is a viable option. -- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company