El diseño de PostgreSQL es lanzar un proceso mestro y uno extra por cada conexión. Cada proceso es single-thread.
La versión 9.6 tiene ya algunas mejoras para paralelizar alguna query en particular pero dudo que le saques provecho.
Activa "log_min_duration_statement" a 1000 (milisegundos) y mira qué aparece en el log. Probablemente te falten índices.
Yo te doy mi receta, pero no prometo nada:
shared_buffers = 256MB
temp_buffers = 32MB
work_mem = 16MB
effective_io_concurrency = 8 # 1 * nucleo cpu si el disco es SSD. 1 * disco si tienes RAID 1 por hardware. En otros casos, 1.
synchronous_commit = off # puedes perder datos con esto (sobre 10 segundos si se va la luz). Normalmente es seguro.
random_page_cost = 1.2 # para SSD. 2.0 si es disco normal.
effective_cache_size = 16GB # La mitad de la ram. Para ser más concretos es el valor típico de memoria no usada en el servidor.
default_statistics_target = 50
cursor_tuple_fraction = 1.0
autovacuum_max_workers = 1
extra_float_digits = -4