La "manera correcta" de hacer streaming con Slick y Postgres incluye tres cosas:
-
Debe usar db.stream()
-
Debe deshabilitar
autoCommit
en el controlador JDBC. Una forma es hacer que la consulta se ejecute en una transacción agregando el sufijo.transactionally
. -
Debe configurar
fetchSize
ser algo más que 0 o postgres empujará todo el conjunto de resultados al cliente de una sola vez.
Ej:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Enlaces útiles:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809