Ja, Connection Pooling im Applikationsserver ist das Beste.
Allerdings gibt es einen Fall, wo das nicht gut genug ist: wenn die Applikation so lahm ist, daß man mit der Workload nicht anders fertig werden kann, als daß man 27 Instanzen des Applikationsservers startet. Dann sind es 27 Connection Pools, und selbst wenn jeder einzelne vernünftig dimensioniert ist, ist das Ganze kein effektives Pooling mehr.
Dann braucht man einen externen Pooler wie pgBouncer, normalerweise auf der Datenbankmaschine.