La "bonne façon" de faire du streaming avec Slick et Postgres comprend trois choses :
-
Doit utiliser db.stream()
-
Doit désactiver
autoCommit
dans le pilote JDBC. Une façon consiste à exécuter la requête dans une transaction en suffixant.transactionally
. -
Doit définir
fetchSize
être autre chose que 0, sinon postgres poussera tout le resultSet vers le client en une seule fois.
Ex :
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Liens utiles :
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809