Unfortunately Postgres doesn't do query caching nor does it have bind variables. However, there has been some work in this area and I think it will get incorporated at some point.
Of course PL/pgSQL only generates query plans the first time a function is run within a particular backend's context, and with much of OpenACS 4's logic tied up in PL/[pg]SQL we do get the benefit of that.
Caching query plans doesn't help when the basic queries suck, though (says Don as he's slowly making progress getting bboard to scale).