Zdarzają się przypadki, w których PostgreSQL w systemie Windows płaci dodatkowe koszty w porównaniu z innymi rozwiązaniami, ze względu na kompromisy dokonane podczas jego portowania.
Na przykład PostgreSQL używa procesu na połączenie, MySQL używa wątku. W Uniksie zwykle nie jest to zauważalna różnica w wydajności, ale w systemie Windows tworzenie nowych procesów jest bardzo kosztowne (ze względu na brak wywołania systemowego fork()). Z tego powodu używanie trwałych połączeń lub puli połączeń to dużo ważniejsza w systemie Windows podczas korzystania z PostgreSQL.
Innym problemem, który zauważyłem, jest to, że wczesny PostgreSQL w systemie Windows domyślnie upewnia się, że jego zapisy przechodzą przez pamięć podręczną zapisu - nawet jeśli jest zasilany bateryjnie. AFAIK, MySQL tego nie robi i znacznie wpłynie to na wydajność zapisu. Teraz jest to faktycznie wymagane, jeśli masz niezabezpieczony sprzęt, taki jak tani dysk. Ale jeśli masz pamięć podręczną zapisu podtrzymywaną bateryjnie, chcesz to zmienić na zwykłe fsync. Nowoczesne wersje PostgreSQL (z pewnością 8.3) będą domyślnie używać open_datasync, co powinno usunąć tę różnicę.
Nie wspominasz również o tym, jak dostroiłeś konfigurację bazy danych. Domyślnie plik konfiguracyjny dostarczany z PostgreSQL to bardzo konserwatywny. Jeśli nic tam nie zmieniłeś, na pewno musisz się temu przyjrzeć. Na wiki PostgreSQL znajdziesz porady dotyczące strojenia. .
Aby podać więcej szczegółów, będziesz musiał podać dużo więcej szczegółów na temat tego, co działa wolno i jak dostroiłeś swoją bazę danych. Proponuję wysłać e-mail na listę dyskusyjną pgsql-general.