Robert Haas <robertmh...@gmail.com> writes: > On Thu, Dec 6, 2018 at 12:03 PM Tom Lane <t...@sss.pgh.pa.us> wrote: >> [ further experimentation... ] It looks like if you prepare >> a query and then just execute it repeatedly in one transaction, >> you'd not reach AIM (as long as you were getting generic plans). >> Possibly that's a gap worth closing.
> If we called it at the start of every query, couldn't we dispense with > the call in relation_openrv_extended()? No. You need to do AIM *after* obtaining the lock, else you still have the race condition that you can execute a query on a table without being aware of recent DDL on it. What we could possibly do to close the gap cited above is to have plancache.c's CheckCachedPlan force an AIM call if it notices that the plan it wants to re-use has a non-empty PlanInvalItems list. If it does not, then there is nothing that AIM would cause invalidation for anyway. This still leaves us with a query-duration-sized race condition window for DDL on functions and domains, but not any larger than that. regards, tom lane