De "juiste manier" om te streamen met Slick en Postgres omvat drie dingen:
-
Moet db.stream()
. gebruiken -
Moet
autoCommituitschakelen in JDBC-stuurprogramma. Eén manier is om de query in een transactie uit te voeren door.transactionallyals achtervoegsel te gebruiken . -
Moet
fetchSizeinstellen 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