I'm not sure that expecting the relcache entry's refcount drops to zero at the right time is a good approach; that may cause leaks some other place might have refcounts you're not expecting (say, an open cursor that's not fully read).
My proposal was to maintain a refcount counting the number of times an index is opened in ResultRelInfo itself, not to rely on the relcache ref count. But I think that would be an overkill. Please read ahead
(I'm not terribly worried about refcount leakage as a theoretical concern, since the ResourceOwner mechanism will warn us about that if it happens.)
> 2. Throw an error in ExecOpenIndices if all the arrays are present. We will > need to check leaf_part_rri->ri_IndexRelationDescs == NULL in > ExecInitPartitionInfo().
This sounds like a job for an assert rather than an error.
I agree. Here's a patch to fix to add Assert'ion in ExecOpenIndices(). I ran make check with this patch and the assertion didn't trip. I think this will be a good step forward.