Amit Langote <Langote_Amit_f8@xxxxxxxxxxxxx> writes: > On 2018/10/26 18:16, Tom Lane wrote: >> A quick review of the other index AM endscan methods seems to indicate >> that they all try to clean up their mess. So maybe we should just make >> spgendscan do likewise. Alternatively, we could decide that requiring >> endscan methods to free storage is not very safe, in which case it would >> be incumbent on check_exclusion_or_unique_constraint to make a temporary >> context to run the scan in. But if we're going to do the latter, I think >> we oughta go full in and remove the retail pfree's from all the *endscan >> functions. We'd also have to review other callers of >> index_beginscan/index_endscan to see which ones might also need their own >> temp contexts. So that would surely end up being more invasive than >> just adding some pfree's to spgendscan would be. Maybe in the long run >> it'd be worth it, but probably not in the short run, or for back-patching. > FWIW, I would prefer the latter. Not that people write new AMs on a > regular basis because we gave them an easier interface via CREATE ACCESS > METHOD, but it still seems better for the core code to deal with memory > allocation/freeing to avoid running into issues like this. After a quick look around, I think that making systable_begin/endscan do this is a nonstarter; there are just too many call sites that would be affected. Now, you could imagine specifying that indexes on system catalogs (in practice, only btree) have to clean up at endscan time but other index types don't, so that only operations that might be scanning user indexes need to have suitable wrapping contexts. Not sure there's a lot of benefit to that, though. regards, tom lane