O PostgreSQL (por padrão) retorna todas as linhas de uma só vez. Isso tem a vantagem de liberar recursos no lado do servidor ao custo de possivelmente grandes conjuntos de resultados no cliente.
A alternativa é usar um cursor que pode retornar uma única linha de cada vez. Alguns drivers suportam isso diretamente (talvez DOP ?) ou você pode usar DECLARE e FETCH
A outra coisa a ser observada é a COPY do PostgreSQL comando que pode despejar uma tabela ou consulta diretamente em um arquivo (supondo que você não precise de muito processamento/formatação). Verifique se sua biblioteca de banco de dados oferece acesso direto.