Я что-то вопрос не очень понял.
Если что, то я про pgsql_tmp. Можно, конечно, просто выкрутить work_mem настолько, что туда ничего/почти ничего писаться не будет, но тогда мы будем на каждый коннект память выделять, независимо от того нужна она или нет. Сунуть pgsql_tmp на приемлемый по размеру рамдиск (можно ещё и со сжатием) выльется в "чуть медленнее", зато предсказуемо по потреблению памяти, и ,в большинстве случаев, такой подход может немало оперативки сэкономить.
Хотя, как я сказал, холиварно, ситуации бывают разные. Кому-то случается и под 40-50G в этой директории заиметь.
> Если что, то я про pgsql_tmp.
Я тоже. Я имел в виду — ограничить с помощью temp_file_limit, да и всё.
> но тогда мы будем на каждый коннект память выделять, независимо от того нужна она или нет.
Ничего подобного. Work_mem — просто рекомендательное "ограничение", причём на один узел запроса.
Т.е. если запросам в данной сессии столько памяти не нужно — она и не выделяется вообще.
А если требуется больше, т.е. другого выхода нет (я тут как-то приводил примеры) — PostgreSQL попробует выделить сколько нужно, проигнорировав work_mem, кстати.
> Сунуть pgsql_tmp на приемлемый по размеру рамдиск
Мой совет выше — просто чтобы с ram disk не заморачиваться. Хотя таким образом можно ограничить "в общем", минус в непредсказуемых ошибках в запросах в сессиях, когда эта память будет почти исчерпана (т.е. сессии начнут "красть" друг у друга ресурсы). ;)
> такой подход может немало оперативки сэкономить.
Каким образом (по сравнению с тем, чтобы просто ограничить)?