Bruce Momjian <bruce@momjian.us> writes:
> If the plan output is independent of work_mem,
... it isn't ...
> I always wondered why we
> didn't just determine the number of simultaneous memory requests in the
> plan and just allocate accordingly, e.g. if there are four simultaneous
> memory requests in the plan, each gets work_mem/4.
(1) There are not a predetermined number of allocations. For example,
if we do a given join as nestloop+inner index scan, that doesn't require
any large amount of memory; but if we do it as merge or hash join then
it will consume memory.
(2) They may not all need the same amount of memory, eg joins might
be working on different amounts of data.
If this were an easy problem to solve, we'd have solved it decades
ago.
regards, tom lane