Com o PostgreSQL, você tem duas áreas diferentes que podem fazer pool, na camada do aplicativo (ou seja, no jdbc integrado no pool etc.) ou em uma camada intermediária que fica entre o aplicativo e o db (s), como pgbouncer ou pgpool.
Se você fizer um pool em uma camada intermediária, como pgbouncer ou pgpool, essa camada também poderá fazer o balanceamento de carga de consultas selecionadas. Além disso, no balanceamento de carga, você pode fazer gravações de duas maneiras: você pode ter um único mestre de gravação que replica por outros meios para seus slaves de leitura, usando uma ferramenta como slony ou a replicação de streaming incorporada que aparece na página 9.0 e acima, ou você pode fazer com que o balanceador de carga faça toda a gravação, para que as leituras recebidas atinjam apenas um db, mas as gravações atinjam cada banco de dados para mantê-las atualizadas.
Ou, se você é aventureiro, pode mover a camada de balanceamento de carga para outra camada para o próprio postgresql usando o plproxy. Essa é uma linguagem pl para o pgsql projetada para permitir que você coloque um banco de dados pg no front-end que não possui dados reais, e esse banco de dados pode executar sobre vários dbs possivelmente redundantes para obter uma taxa de transferência incrível. O plpoxy é bastante complexo para configurar e funcionar, mas também é bastante escalável. Observe que seu aplicativo precisa ser reescrito para suportá-lo, para que não possa ser lançado em nenhum aplicativo antigo e apenas funcione.
http://slony.info/
http://wiki.postgresql.org/wiki/PL/Proxy
http://pgpool.projects.postgresql.org/