Konstantin Knizhnik <k.knizh...@postgrespro.ru> writes: > But let me ask you one more question: why do we obtaining snapshot twice > in exec_simple_query: > first for analyze (pg_analyze_and_rewrite) and one for execution > (PortalStart)?
That would happen anyway if the plan is cached. If we were to throw away all plan caching and swear a mighty oath that we'll never put it back, maybe we could build in a design assumption that planning and execution use identical snapshots. I doubt that would lead to a net win though. Also note that our whole approach to cache invalidation is based on the assumption that if session A needs to see the effects of session B, they will be taking conflicting locks. Otherwise sinval signaling is not guaranteed to be detected at the necessary times. regards, tom lane