Зависит от многих условий. Однако, учтите, что:
1. Запрос к базе дороже по ресурсам, чем собственная память. Памяти у вас на хосте обычно гигабайты, плюс локальный SWAP. Частые же запросы к базе создают на нее нагрузку и конкурируют с другими запросами.
2. Доступ к собственной памяти во много-много-много раз быстрее доступа по сети.
Отсюда вывод - кэширование необходимо и вы все делаете правильно.
Для того, чтобы не съедать ВСЮ память, нужно ограничиться определенным (настраиваемым!) объемом, при выходе за который самые старые данные (к которым давно не было обращений) из кэша удалять.
Чтобы не получить ситуацию, когда в базе данные поменялись, а вы об этом ничего не знаете, воспользуйтесь
pg_notify