„Správný způsob“ streamování pomocí Slick a Postgres zahrnuje tři věci:
-
Je nutné použít db.stream()
-
Je nutné zakázat
autoCommit
v ovladači JDBC. Jedním ze způsobů je spuštění dotazu v transakci přidáním přípony.transactionally
. -
Je nutné nastavit
fetchSize
být něco jiného než 0, jinak postgres pošle celou sadu výsledků klientovi najednou.
Příklad:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Užitečné odkazy:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809