Как оптимизировать производительность большой базы в postgresql?
Собственно, вам нужно поднять значение shared_buffers до величины, чтобы в них влезала ваша максимальная выборка ( общий объем всех таблиц самого большого джойна), установить  work_mem так, чтобы все сортировки оказывались в оперативной памяти (смотрится explain analyzeом), а потом (или, скорее - в процессе) заставить вашу машину со всем этим работать, донастроив ядро.
Из вопроса не совсем ясна структура данных. Т.е. кретична ли высокая согласованность данных? Требуют ли данные транзакции?
Если устраивает подход "согласованность в конечном счете", то вероятно есть смысл смотреть в сторону NoSQL и там использовать MapReduce