De "juiste manier" om te streamen met Slick en Postgres omvat drie dingen:
-
Moet db.stream()
. gebruiken -
Moet
autoCommit
uitschakelen in JDBC-stuurprogramma. Eén manier is om de query in een transactie uit te voeren door.transactionally
als achtervoegsel te gebruiken . -
Moet
fetchSize
instellen om iets anders dan 0 te zijn, anders zal postgres de hele resultSet in één keer naar de client sturen.
Bijv.:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Handige links:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809