Postgres forks on every incoming connection - and the forking process and backend setup is a bit slow
Yes, PostgreSQL forks on all incoming connections.
So does Apache 1.3
And OpenLDAP 2.x
But forking on each connection isn't what's expensive. On Linux or BSD, forking is basically no more expensive than launching another thread. Unlike solaris or windows, where forking costs more than on linux or BSD.
Further, the biggest cost isn't in forking, it's in setting up the rest of the connection and authenticating etc...
This is why you use connection pooling for big busy sites.
However, running pgbench on my big box at work (dual 2800MHz with 2 gig ram and RAID-1 on a battery backed controller) I can execute 250 transactions per second with 250 clients in parallel. That's one transaction per second per client, including the time to connect / disconnect.
In closing, I'd like to point out that the phrase "PostgreSQL is powerful but slow" is now as outdated as the phrase "PHP is easy, but lacks object oriented features" or "Reiserfs is fast but unstable" or "apache is slow but very configurable"
Times have moved on, and PostgreSQL now hauls ass. while MySQL can still beat it or just about any other database when only a single reader is connected to it, when it comes to handling dozens or hundreds of connections, with a mixed read / write load, PostgreSQL is one of the fastest databases I've ever seen, and is easily a match for Oracle on a 2 to 4 CPU machine.