On Fri, 21 Dec 2018 at 10:05, Robert Haas <robertmh...@gmail.com> wrote: > On Thu, Dec 20, 2018 at 3:58 PM Alvaro Herrera <alvhe...@2ndquadrant.com> > wrote: > > Namely: how does this handle the case of partition pruning structure > > being passed from planner to executor, if an attach happens in the > > middle of it and puts a partition in between existing partitions? Array > > indexes of any partitions that appear later in the partition descriptor > > will change. > > > > This is the reason I used the query snapshot rather than EState. > > I didn't handle that. If partition pruning relies on nothing changing > between planning and execution, isn't that broken regardless of any of > this? It's true that with the simple query protocol we'll hold locks > continuously from planning into execution, and therefore with the > current locking regime we couldn't really have a problem. But unless > I'm confused, with the extended query protocol it's quite possible to > generate a plan, release locks, and then reacquire locks at execution > time. Unless we have some guarantee that a new plan will always be > generated if any DDL has happened in the middle, I think we've got > trouble, and I don't think that is guaranteed in all cases.
Today the plan would be invalidated if a partition was ATTACHED or DETACHED. The newly built plan would get the updated list of partitions. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services