Hi Andres,
> So what if we, at the begin / end of cache miss handling, re-check if > the to-be-decoded transaction is still in-progress (or has > committed). And we throw an error if that happened. That error is then > caught in reorderbuffer, the in-progress-xact aborted callback is > called, and processing continues (there's a couple nontrivial details > here, but it should be doable). > > The biggest issue is what constitutes a "cache miss". It's fairly > trivial to do this for syscache / relcache, but that's not sufficient: > there's plenty cases where catalogs are accessed without going through > either. But as far as I can tell if we declared that all historic > accesses have to go through systable_beginscan* - which'd imo not be a > crazy restriction - we could put the checks at that layer. > Documenting that historic accesses go through systable_* APIs does seem reasonable. In our earlier discussions, we felt asking plugin writers to do anything along these lines was too onerous and cumbersome to expect. > That'd require that an index lookup can't crash if the corresponding > heap entry doesn't exist (etc), but that's something we need to handle > anyway. The issue that multiple separate catalog lookups need to be > coherent (say Robert's pg_class exists, but pg_attribute doesn't > example) is solved by virtue of the the pg_attribute lookups failing if > the transaction aborted. > > Am I missing something here? > Are you suggesting we have a: PG_TRY() { Catalog_Access(); } PG_CATCH() { Abort_Handling(); } here? Regards, Nikhils