Robert Haas <robertmh...@gmail.com> writes: > On Wed, Mar 13, 2019 at 3:14 PM Tom Lane <t...@sss.pgh.pa.us> wrote: >> Meanwhile, who's going to take point on cleaning up rd_partcheck? >> I don't really understand this code well enough to know whether that >> can share one of the existing partitioning-related sub-contexts.
> To your question, I think it probably can't share a context. Briefly, > rd_partkey can't change ever, except that when a partitioned relation > is in the process of being created it is briefly NULL; once it obtains > a value, that value cannot be changed. If you want to range-partition > a list-partitioned table or something like that, you have to drop the > table and create a new one. I think that's a perfectly acceptable > permanent limitation and I have no urge whatever to change it. > rd_partdesc changes when you attach or detach a child partition. > rd_partcheck is the reverse: it changes when you attach or detach this > partition to or from a parent. Got it. Yeah, it seems like the clearest and least bug-prone solution is for those to be in three separate sub-contexts. The only reason I was trying to avoid that was the angle of how to back-patch into 11. However, we can just add the additional context pointer field at the end of the Relation struct in v11, and that should be good enough to avoid ABI problems. Off topic for the moment, since this clearly wouldn't be back-patch material, but I'm starting to wonder if we should just have a context for each relcache entry and get rid of most or all of the retail cleanup logic in RelationDestroyRelation ... regards, tom lane