„Właściwy sposób” przesyłania strumieniowego za pomocą Slick i Postgres obejmuje trzy rzeczy:
-
Musisz użyć db.stream()
-
Musisz wyłączyć
autoCommit
w sterowniku JDBC. Jednym ze sposobów jest uruchomienie zapytania w transakcji przez dodanie przyrostka.transactionally
. -
Musisz ustawić
fetchSize
być czymś innym niż 0, w przeciwnym razie postgres przekaże cały zestaw wyników do klienta za jednym razem.
Np.:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Przydatne linki:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809