Det "rätta sättet" att streama med Slick och Postgres inkluderar tre saker:
-
Måste använda db.stream()
-
Måste inaktivera
autoCommit
i JDBC-drivrutinen. Ett sätt är att få frågan att köras i en transaktion genom att suffixa.transactionally
. -
Måste ställa in
fetchSize
att vara något annat än 0, annars skickar postgres hela resultatuppsättningen till klienten på en gång.
Ex:
DB.stream(
find(0L, 0L)
.transactionally
.withStatementParameters(fetchSize = 1000)
).foreach(println)
Användbara länkar:
https://github.com/slick/slick/issues/1038
https://github.com/slick/slick/issues/809