On 2018/07/26 5:23, Robert Haas wrote:
> I noticed today that in the PartitionDispatch structure, the partdesc
> field is set but not used. So we could remove it. See attached
> pd-partdesc-remove.patch. If we want to go this route, I suggest
> doing a slightly more thorough removal and getting rid of the key
> field as well. See attached pd-partdesc-and-key-remove.patch.
>
> Another alternative, which I think might make more sense, is to make
> use pd->key and pd->partdesc in preference to pd->reldesc->rd_partkey
> and pd->reldesc->rd_partdesc. It seems to me that the idea of the
> PartitionDispatch structure is that it gathers together all of the
> information that we need for tuple routing, so it might make sense for
> the tuple routing code ought to get the information from there rather
> than referring back to the RelationDesc. See attached
> pd-partdesc-use.patch.
+1 to pd-partdesc-use.patch.
> Basically, the decision here is whether we want to avoid invoking
> RelationGetPartitionKey and RelationGetPartitionDesc over and over
> again, either for reasons of notational cleanliness (macro names are
> long) or safety (absolutely no chance that the answer will change) or
> efficiency (maybe those macros will someday do more than just a
> pointer dereference?). If so, we should cache the data in the
> PartitionDispatch object and then use it.
I agree.
Thanks,
Amit